用户在cin中输入'EOF'时无限循环

时间:2013-07-22 21:42:19

标签: loops eof cin infinite

所以我有这部分代码:

void safeInput( int *n, int low, int up )      
{                                            
    while ( !( cin >> *n ) || ( low != -1 ? *n < low : false ) || ( up != -1 ? *n > up : false  )) {

            if ( cin.fail() ) {
                    cin.clear();
                    cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
            }

            if ( cin.eof() ) {
                    cin.clear();
            }

            cout << "Invalid input. Please try again.\n";
    }

    cin.ignore( 1 );
}

为了澄清第3行,低和高是n的允许值的下限和上限。这些在函数调用中指定。值-1表示无穷大(无限制地高于或低于)。

无论如何,我的问题是这个功能设法在用户输入角色时捕获错误,例如'a','@@'或大多数其他乱码。但是如果用户输入^ D(EOF),那么程序仍然处于无限循环中,即使我确实使用了cin.eof()和cin.clear()。可能是什么问题?

编辑:

为了澄清程序中发生的事情,这里是一个示例提示和用户输入:

Enter row size: 1
Enter column size: a
Invalid input. Please try again.
-1
Invalid input. Please try again.
^D
Invalid input. Please try again.
Invalid input. Please try again.
Invalid input. Please try again.
Invalid input. Please try again.
Invalid input. Please try again.
Invalid input. Please try again.
...

等永远。我不介意用户完成输入,但如何避免无限输出“无效输入。请再试一次”。中间没有提示?

0 个答案:

没有答案