字母存储为整数

时间:2014-11-11 10:13:56

标签: while-loop integer letters

#include <iostream> 
#include <string>

using namespace std;

int main()
{
    cout << "Please enter an integer between 1 and 5" << endl;
    int x;                                                      //Selection of menu prompt
    cin >> x;
    while (x < 1 || x > 5)                                      //Tossing out garbage input
    {
        cout << "Invalid selection, please make another." << endl;
        cin >> x;
    }
    return 0;
}

当这个运行时,例如输入“a”,进入while循环,但不等待“cin&gt;&gt; x;”的用户输入。而是无限循环。有人可以向我解释为什么会发生这种情况以及我如何解决这个问题?我只能想象它与键盘缓冲区有关。

2 个答案:

答案 0 :(得分:0)

在此代码中,cin可能会进入错误状态。如果用户没有输入整数,则会失败。

也就是说,如果用户输入a,则cin >> x未设置x,并且以后对cin >> x的调用不会阻止。你看到一个无限循环。

您可以检查此故障状态并清除它。在继续使用类似的代码之前:

if (cin.fail())
{
    cin.clear();
    cin.ignore();
    cerr << "Invalid selection, please make another." << endl;
}

答案 1 :(得分:0)

接受输入后,你真的应该使用cin.clear()和cin.ignore()。

cin.clear()清除cin上的错误标志,然后cin.ignore(5000,'\ n')跳到下一个换行符。它将跳过最多5000个字符,因此代码假设用户不会输入很长时间。

相关问题