检查用户整数输入与cin给出无限循环
我试图打印一个错误消息,如果用户不输入任何东西到输入提示,并且他们输入的是零或更少。检查用户整数输入与cin给出无限循环
void checkScoreInputed(int* qaltScores, int i){
while(true){
// cin.clear(); here?
if ((cin >> qaltScores[i]) && (qaltScores > 0)){
// also tried placing cin.clear() here.
break;} else // else is optional
cout << "Please supply a positive number for the score: ";
}
}
我试过把cin.ignore()和cin.clear()之前和if语句后,但用户进入非整数值后我仍然得到的cout << "Please supply...."
一个无限循环,就像一个角色。我怎样才能解决这个问题?
您在
if ((cin >> qaltScores[i]) && (qaltScores[i] > 0))
^^^
忘了[i]
没有它,你正在检查的指针的值,而不是数你刚才读。
您还需要致电cin.clear()
和cin.ignore()
。
void checkScoreInputed(int* qaltScores, int i) {
while(true) {
if ((cin >> qaltScores[i]) && (qaltScores[i] > 0)){
break;
}
cout << "Please supply a positive number for the score: ";
cin.clear();
cin.ignore(10000,'\n');
}
}
见Why would we call cin.clear() and cin.ignore() after reading input?
哦,woops。谢谢。但是这并没有解决我的问题。在添加qaltScores [i]> 0的最后一个条件之前,我也遇到了无限循环问题。 – LazerSharks 2013-03-02 22:46:49
@Gnuey:您还需要调用clear()和ignore()。 – NPE 2013-03-02 22:47:59
我应该把它们放在if语句之外还是之内? – LazerSharks 2013-03-02 22:49:36
事情是,我不知道,我应该把明确的(),如果需要的话。 – LazerSharks 2013-03-02 22:47:26
您需要在输入状态不良后再调用它们。在你的代码中,这在输出中是最符合逻辑的。 – chris 2013-03-02 22:49:29
@chris感谢克里斯,你的评论,这应该是一个答案,帮助并使其工作! – LazerSharks 2013-03-02 22:50:51