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

C++字符串输入打破我的int CIN?,c++,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; } 只

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

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;
}

只要我输入数字,它就可以正常工作,但如果我输入“a”,它会破坏我的程序,进入无限循环。。。从我对C++的理解来看,这毫无意义。既然我输入了userinput作为int,它会不会接受'a'作为a的ASCII值,并给出一个无效的输入错误,因为它不是我菜单列表上的一个数字?为什么是无限循环,我如何阻止它?我正在Visual Studio 2012中编写代码,如果有什么不同的话…

您需要清除流

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

紧接着cout这是因为userinput是一个整数值,“a”不是一个数字

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

那不是。。。给出一个无效的输入错误,因为它不是一个数字,它确实是这样做的-但是你的代码没有检查错误。您观察到的无限循环是cin>>userinput反复读取同一个字符并未能解析它。此循环可能有一百万个重复。流不会解析其ASCII等效项中的“a”,因为它是一个字符而不是整数。应为cin。ignorenumeric_limits::max;谢谢大家。。。对于C++来说还是很新的,但是我试图验证我的输入,并试图思考我能做的奇怪的输入,并且成功地破解了我的程序。P@NeilKirk,当然,忘了添加,实际上它必须是cin.ignorenumeric_limits::max,“\n”;否则会忽略流的其余部分,这样我们就可以按ENTER键进行新的读取。更新了答案。