C ++字符串输入打破了我的int cin?

时间:2014-08-08 02:13:12

标签: c++

所以,我有一些简单的东西......

int userinput = 0;

cout << "Enter a number: ";
cin >> userinput;

while (userinput != 1 && userinput != 2 ) { //etc for menu options
    cout << "Invalid entry! Try again! ";
    cin >> userinput;
}

只要我输入数字,它就可以正常工作,但是如果我输入了#39;它破坏了我的程序并进入了一个无限循环......根据我对C ++的理解,这没有任何意义。由于我将用户输入键入为int,因此不需要&#39; a&#39;作为a的ASCII值,并且因为我的菜单列表中没有数字而给出无效的输入错误?为什么无限循环,我该如何阻止它?我在Visual Studio 2012中进行编码,如果它有任何区别......

3 个答案:

答案 0 :(得分:0)

您需要清除流

cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');

cout<<...之后,#include <limits>在程序开始之后。

正如@Igor所说,在你读了一个非数字后,cin无法解析它,循环重复,同样的事情一次又一次地发生。这就是为什么重置流解决了它,它消耗&#34;在溪流中留下未经分析的东西。

答案 1 :(得分:0)

这是因为你有&#34; userinput&#34;作为整数值,&#39; a&#39;不是一个数字。

答案 2 :(得分:0)

如果你真的想将一个角色传递给这个程序,你可以使用cin作为角色,然后将它传递给整数。或者,您可以为整数创建包装类,并重载cin以接受类的字符或整数输入。