嘿,当我输入数字字母时,我的代码卡在循环我的 while 上,它只会用“无效输入,请重试”来淹没我的输出。这只是一个简单的菜单。
问问题
101 次
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 回答