读到 C++ 中的新行进入无限循环
Reading till new line in C++ goes in an infinite loop
给定以下程序
#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()
似乎不能帮助解决这里的问题
如果您在 std::cin
上遇到错误(属于 std::istream 类型),那么您需要清除它:
int integer;
cin >> integer;
if (!cin) {
cin.clear(); // If an error occurred, we need to clear it!
...
解决方案是使用 cin.clear()
从失败状态中恢复,然后重试扫描直到换行..
给定以下程序
#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()
似乎不能帮助解决这里的问题
如果您在 std::cin
上遇到错误(属于 std::istream 类型),那么您需要清除它:
int integer;
cin >> integer;
if (!cin) {
cin.clear(); // If an error occurred, we need to clear it!
...
解决方案是使用 cin.clear()
从失败状态中恢复,然后重试扫描直到换行..