为什么这个while循环不像我期望的那样

Why is this while loop not behaving as I expect?

本文关键字:期望 while 循环 为什么      更新时间:2023-10-16

问题是,即使用户输入了正确的名称格式,只有在第一次输入错误时,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,并检查它是否位于数组的末尾。

  1. 请不要递归地调用验证函数,这是一个可怕的做法,可能会导致堆栈溢出

  2. 当你写的时候,你需要通过在父变量

  3. 中输入每一个错误的数字来转义递归函数

提示:更体面的方法是让验证函数使用其返回值并返回false,如果输入无效。如果适合的话,父节点可能会再试一次。