2014-12-02 72 views
1

我有一个小程序,我想评估输入。 N变量的输入只能是1到2000之间的一个数字。现在,如果我输入正确/不正确的数字,我写的下面的代码工作正常,但是当我输入一些随机字母时(我必须确保只有数字,所以我必须处理,如果有人放入信件),提示会写出尽可能多的信件,我已经放入,我只希望它被放出一次。所以,如果我写34,它的作品。如果我编写3355453,则会检查输入,并提示用户再次尝试使用1到2000之间的数字。当我写入字母'x'时,会检查输入并提示用户再次尝试输入数字再次介于1到2000之间,但如果我编写更多字母(例如xxxx),则提示会出现4次而不是1次。如果我输入7个字母,propt出现7次。任何方式来解决这个问题?谢谢!cin.fail错误处理问题

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

回答

1

更换cin.ignore()瓦特/ cin.ignore(INT_MAX, '\n');

+0

什么样的魔力,这是? :D谢谢,这究竟做了什么?除了工作:D – 2014-12-02 22:06:06

+0

请看看文档http://www.cplusplus.com/reference/istream/istream/ignore/。默认情况下,忽略调用忽略* one *字符或直到它遇到EOF,在我们的情况下,我们将忽略尽可能多的字符(MAX_INT足够大),直到我们遇到/到达行尾符号('\ n')由用户输入。 – 2014-12-02 22:09:41