试图从cin获取输入时陷入循环

时间:2013-10-02 00:06:41

标签: c++ iostream

好吧我对C ++很陌生,我很喜欢C#而且我真的不知道我的代码有什么问题。我只想弄清楚如何检查用户的输入是整数还是字符串。

但是当我输入'a'或其他字符串时,while循环永远不会结束。

    #include <iostream>

using namespace std;

int main ()
{
    int number;
    goto skip;
    do
    {
        cout << "Wrong input. Try again.";
skip:
        cout << "Number: ";
        cin >> number;
    }
    while (!cin);
    cout << "Correct input.";
    system("PAUSE");
}

1 个答案:

答案 0 :(得分:4)

一旦您的流进入故障模式,它将保持故障模式,直到您clear()其状态位。但是,仅仅清除这些位将无济于事,因为违规字符将保留在流中。在重试之前,您很可能想要忽略整行:

while (!(std::cout << "Number: " && std::cin >> number)) {
    std::cout << "Wrong input. Try again.\n";
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cout << "Correct input.\n";
std::cin.ignore();