我正在制作一个程序,用户必须通过输入1,2或3来选择一个选项。我能够检测到他们输入了什么号码并让程序重复提示,如果他们输入的数字不是这些使用switch语句。每次我输入一封信时,程序会不断地每秒重复提示数百次。如何在继续之前检查变量以确保它包含int。我有一种感觉,它会涉及使用一个字符串然后检查它以确保它包含一个int然后转换它,如果我可以有一个这样的代码的例子,它会很棒。感谢
答案 0 :(得分:8)
您应始终验证您是否已成功阅读所需的输入。如果输入失败,您可能想要摆脱有问题的字符并重试:
int value(0);
while (!(std::cin >> value)) {
std::cout << "you entered a non-digit character\n";
std::cin.clear(); // make sure that std::cin is happy to do something
std::cin.ignore(); // ignore the offending character
}
如果输入失败,则会在流上设置std::ios_base::failbit
,并且流不会转换为true
(或应用于流的非运算符!
将返回true
})。设置std::ios_base::failbit
后,流将拒绝进行任何进度,直到再次清除该位。使用clear()
可以重置错误位。然而,一旦比特被重置,违规字符仍然在输入中。要摆脱下一个角色,您只需使用ignore()
即可。如果您觉得要忽略整行输入,可以使用类似
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');