2013-03-02 76 views
2

我試圖打印一個錯誤消息,如果用戶不輸入任何東西到輸入提示,並且他們輸入的是零或更少。檢查用戶整數輸入與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

回答

2

您在

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