0

嘿,当我输入数字字母时,我的代码卡在循环我的 while 上,它只会用“无效输入,请重试”来淹没我的输出。这只是一个简单的菜单。

4

2 回答 2

3

如果您曾经输入任何“无效”的内容,例如从 cin 读取将导致错误,您必须调用cin.clear()才能读取进一步的输入,否则操作符中的流将立即返回。

通常,在读取用户输入时,您会检查 cin 的状态并在它无效时退出或进行一些错误处理。此外,在输入尝试失败时,导致错误的字符仍将位于 cin 中,需要忽略(例如,直到下一个换行符):

#include <iostream>
#include <limits>

int main() {
    int userOption;
    while(1) {
        while(!(std::cin >> userOption)) {
            std::cout << "Invalid input." << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << userOption << std::endl;
    }
    return 0;
}
于 2013-09-24T12:41:58.550 回答
0

问题在于以下代码行,

cin.ignore(numeric_limits<streamsize>::max(), '\n');

当您输入单个数字时,您不必忽略任何其他字符。因此,只需删除上面的代码行即可更正您的程序。

于 2013-09-24T12:43:38.403 回答