如果输入字符串作为输入,则以下函数将导致无限循环。

istream & inputFunc(istream &is)
{
   int ival;
    // read cin and test only for EOF; loop is executed even if there are other IO failures
    while (cin >> ival, !cin.eof()) {
        if (cin.bad())         // input stream is corrupted; bail out
            throw runtime_error("IO stream corrupted");
        if (cin.fail()) {                        // bad input
            cerr<< "bad data, try again";        // warn the user
            cin.clear(istream::failbit);         // reset the stream
            continue;                            // get next input
        }
        // ok to process ival
        cout << "you entered: " << ival << endl;
    }



}
如果输入字符串作为输入,则以下函数将导致无限循环。
输出:
再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据,再试一次坏数据数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,再试一次不良数据,

最佳答案

您需要做两件事:

1)清除状态,如下所示:cin.clear(istream::goodbit);
2)清除状态后,一次跳过一个字符,因为您不知道下一个数字从哪里开始:

 char c;
 cin >> c;

10-08 11:48