使用cin关闭while循环

时间:2014-03-02 01:57:18

标签: c++ while-loop

我正在尝试使用while循环验证用户输入。请参阅下面的代码/ while循环。我希望他们输入一个浮点数,我试图验证他们输入了一个数字而不是一个字母/句子。我认为这个循环应该可以工作,但是当我运行它时,如果我输入一个数字,它会在到达程序结束之前解决,如果我输入一个字符串,它会触及cout语句,则无法请求{{1然后验证循环。如果您能解释发生了什么以及为什么发生以及如何解决它,我将非常感激。

cin

1 个答案:

答案 0 :(得分:3)

您应该将while循环中的代码更改为:

cout<<"that is not a number, do not pass go, do not collect $200 but DO try again."<<endl;

if (!cin) { // we enter the if statement if cin is in a "bad" state.
    cin.clear(); // first we clear the error flag here
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // now we skip the input,
                                                                   // that led to the invalid state
}

cin>>mph;

如果您输入字符串并尝试将其读入带有float的{​​{1}},cin将进入无效状态,并且在清除之前拒绝读取任何输入。
这就是我上面建议的代码试图解决的问题。请注意,您必须包含cin才能使其正常工作。

有关清除输入流的详细信息,请参阅相关链接:Why is this cin reading jammed?