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