提问人:moriaz 提问时间:4/4/2022 最后编辑:wohlstadmoriaz 更新时间:2/21/2023 访问量:92
如何忽略所有 cin 错误并继续读取输入
How to ignore all cin errors and continue reading inputs
问:
我正在尝试编写一段代码,该代码可以连续从输入()中读取。它应该忽略可能的错误并继续读取下一个输入。cin
目前,我知道可能发生的两个错误:EOF (Ctrl + D),或输入字符而不是数字。
这是代码的简化摘录,但是当我按 Ctrl + D 时,它不起作用。
int ival;
int i = 0;
while(true)
{
cout << i++ << ": ";
cin >> ival;
if (!cin.good())
{
cin.clear();
if (cin.eof()) clearerr(stdin);
cin.ignore(10000,'\n');
}
else
cout << ival << endl;
}
我已经检查了以下帖子和其他一些类似的帖子。但是,它们中的每一个一次只处理其中一个错误。
我还尝试了错误处理部分中语句的各种排列,但仍然不成功。
答:
0赞
moriaz
2/21/2023
#1
这是一段处理 EOF(Ctrl+D) 和错误输入的代码。它继续读取输入并忽略无效的输入。
int ival;
for (int i = 0; i < 5; ++i) {
cin >> ival;
/*
if (cin.fail()) cout << "fail" << endl;
if (cin.eof()) cout << "eof" << endl;
if (cin.bad()) cout << "bad" << endl;
if (cin.good()) cout << "good" << endl;
*/
if (!cin.good()) {
if (cin.eof()) { //EOF = Ctrl + D
clearerr(stdin);
cin.clear(); //this must be done after clearerr
}
else { //This handels the case when a character is entered instead of a number
cin.clear(); //
cin.ignore(10000,'\n');
}
}
else
cout << ival << endl;
}
评论