我知道这样的问题还有很多,而且都有正确答案。然而,我在这里关心的是为什么我对下面代码的解释是错误的。
#include <iostream>
#include <string>
int main(){
std::cout << "Write an integer:\n>";
int n;
std::cin >> n;
while (!std::cin) {
std::cout << "ERROR, you are allowed to enter an integer only.Try again!\n>";
std::cin.clear();
//std::cin.ignore(10000,'\n');
std::cin >> n;
}
std::cout << "\nYou entered the integer: " << n;
return 0;
}
现在发生的情况是,如果我输入像“h”这样的字符,它将永远继续显示错误句子。
假设我没有运行该程序。我将上面的代码解释如下:
当我输入无效的输入(例如“h”)时,cin 将失败并且 while 条件将变为 true。另外,输入缓冲区中会有一个'\n'字符。
现在程序将显示错误消息并清除 cin 错误标志。现在cin恢复到原来的状态,可以再次获取输入了。
现在输入缓冲区中有一个换行符,cin 将跳过它,允许用户再次输入另一个字符。所以程序应该可以正常工作(但是,实际上却不然!)
为什么它不能像我上面解释的那样工作?
最佳答案
如果取消注释 std::cin.ignore
,代码应该可以工作。如果没有ignore
,'h'
就不会从序列中删除,因此您会尝试一次又一次地读取它。
关于c++ - 检查输入是否为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442279/