当我输入正确的值(整数)时,它是好的。但是当我输入一个角色时,我会得到一个无限循环。我查看了这段代码的每一面,但是找不到它的问题。为什么会这样?我在Windows上使用g ++ 4.7。
#include <iostream>
#include <limits>
int main()
{
int n;
while (!(std::cin >> n))
{
std::cout << "Please try again.\n";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
}
}
输入:x
输出:
答案 0 :(得分:6)
这是因为您的恢复操作顺序错误。首先清除错误,然后清除缓冲区。
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
答案 1 :(得分:4)
首先必须clear
错误状态,然后然后 ignore
不可解析的缓冲区内容。否则,ignore
将对未处于良好状态的流无效。
您将需要单独处理到达流的末尾。