鉴于以下计划
#include <iostream>
#include <string>
using namespace std;
int main() {
int integer;
cin >> integer;
if (!cin) {
string str;
char ch;
while ((ch = cin.get()) != '\n') {
cout << "scanning" << endl;
cout << "got " << static_cast<int>(ch) << endl;
}
}
return 0;
}
给定此输入文件(重定向输入)
x123
最后一个换行符,为什么程序会进入无限循环?在文件末尾遇到换行符后不应该停止吗?我一直将ch
的值设为-1
..
谢谢!
注意 cin.ignore()
似乎没有帮助解决此问题
答案 0 :(得分:3)
如果您在std::cin
(std::istream类型)上收到错误,则需要清除它:
int integer;
cin >> integer;
if (!cin) {
cin.clear(); // If an error occurred, we need to clear it!
...
答案 1 :(得分:1)
解决方法是使用cin.clear()
从失败状态恢复,然后重试扫描直到换行符。