c++ 如何忽略所有cin错误并继续阅读输入

eh57zj3b  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(176)

我正在尝试编写一段代码,它可以连续地从输入(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;
}

我已经检查了下面的帖子和其他一些类似的帖子。但是,每个帖子一次只处理其中一个错误。
一个一个的。
我还尝试了错误处理部分中语句的各种排列,但仍然不成功。

rt4zxlrg

rt4zxlrg1#

这是一段处理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;
}

相关问题