为什么这个while循环不像我期望的那样
Why is this while loop not behaving as I expect?
问题是,即使用户输入了正确的名称格式,只有在第一次输入错误时,while循环才不会退出。当用户第一次正确输入名称时,不会出现此问题。
void inputclass::validateName(string name) {
bool flag = true
while (flag == true) {
for (int i=0; i < name.length(); i++) {
if (name[i] != ' ') {
if (!isalpha(name[i])) {
cout << "You have entered incorrectly. Please try again. " << endl;
setName();
} else if (i == name.length()-1) {
cout << "Welcome " << name << endl;
flag = false; //break out of while loop
}
}
}
}
}
void inputclass::setName() {
string name;
cout << "Please enter your name: " << endl;
getline(cin, name);
validateName(name);
}
你似乎很难找到解决问题的逻辑。只要从一些伪代码开始,一旦知道需要什么就开始实现。我猜你在找类似
的东西bool valid = false
while not valid:
name = setName()
valid = validate(name)
则不需要递归。只需实现一个setName()
,它读取用户输入并返回一个字符串。以及执行验证并返回bool值的validate()
。简单,是吧?
这是c++,没有数组边界检查。您正在读取数组的末尾,isalpha()返回true。交换if和else,并检查它是否位于数组的末尾。
-
请不要递归地调用验证函数,这是一个可怕的做法,可能会导致堆栈溢出
-
当你写的时候,你需要通过在父变量
中输入每一个错误的数字来转义递归函数
提示:更体面的方法是让验证函数使用其返回值并返回false
,如果输入无效。如果适合的话,父节点可能会再试一次。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 为什么在 while 循环中返回表达式不起作用
- 一元*运算符的操作数是否期望一个 prvalue
- 我的C++文件期望用'while'代替 if。最后,它预计会出现'('
- 为什么这个while循环不像我期望的那样