Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cin.fail错误处理问题_C++_Cin - Fatal编程技术网

C++ cin.fail错误处理问题

C++ cin.fail错误处理问题,c++,cin,C++,Cin,我有一个小程序,我想评估输入。N变量的输入只能是介于1和2000之间的数字。现在,如果我输入正确/不正确的数字,我写的下面的代码可以正常工作,但是当我输入一些随机字母时(我必须确保只有数字,所以如果有人输入字母,我必须处理),提示被写出来的字母数是我输入的字母数的倍,我只希望它被输出一次。因此,如果我写34,它的工作。如果我写3355453,就会检查输入,并提示用户使用1到2000之间的数字重试。当我写一个字母“x”时,会检查输入,并提示用户再次尝试使用介于1和2000之间的数字,但如果我写更多

我有一个小程序,我想评估输入。N变量的输入只能是介于1和2000之间的数字。现在,如果我输入正确/不正确的数字,我写的下面的代码可以正常工作,但是当我输入一些随机字母时(我必须确保只有数字,所以如果有人输入字母,我必须处理),提示被写出来的字母数是我输入的字母数的倍,我只希望它被输出一次。因此,如果我写34,它的工作。如果我写3355453,就会检查输入,并提示用户使用1到2000之间的数字重试。当我写一个字母“x”时,会检查输入,并提示用户再次尝试使用介于1和2000之间的数字,但如果我写更多的字母,例如xxxx,则提示会显示4次而不是1次。如果我输入7个字母,则道具出现7次。有办法解决这个问题吗?谢谢大家!

do {
  cout << "Please put in a number between 1 and 2000."   <<     endl;
  cin >> N;

  if(cin.fail() || N<1 || N>2000){
    cin.clear();
    cin.ignore();
  }
} while(cin.fail() || N<1 || N>2000);
do{
cout N;
if(cin.fail()| | N2000){
cin.clear();
cin.ignore();
}
}而(cin.fail()| | N2000);

替换
cin.ignore()
w/
cin.ignore(INT_MAX,'\n')

这是什么魔法D谢谢你,这到底是干什么用的?除了工作之外:DPL还可以查看文档。默认情况下,调用ignore只会忽略一个字符或直到遇到EOF为止,在我们的情况下,我们将忽略尽可能多的字符(MAX_INT足够大),直到遇到/到达用户输入的行尾符号('\n')。