检查用户整数输入与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...."一个无限循环,就像一个角色。我怎样才能解决这个问题?

+0

事情是,我不知道,我应该把明确的(),如果需要的话。 – LazerSharks 2013-03-02 22:47:26

+1

您需要在输入状态不良后再调用它们。在你的代码中,这在输出中是最符合逻辑的。 – chris 2013-03-02 22:49:29

+0

@chris感谢克里斯,你的评论,这应该是一个答案,帮助并使其工作! – LazerSharks 2013-03-02 22:50:51

您在

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?

+0

哦,woops。谢谢。但是这并没有解决我的问题。在添加qaltScores [i]> 0的最后一个条件之前,我也遇到了无限循环问题。 – LazerSharks 2013-03-02 22:46:49

+0

@Gnuey:您还需要调用clear()和ignore()。 – NPE 2013-03-02 22:47:59

+0

我应该把它们放在if语句之外还是之内? – LazerSharks 2013-03-02 22:49:36