2013-11-14 89 views
2

該程序應檢查輸入的數字是否爲整數。它適用於字符串,但不適用於雙打。cin in while循環無法正常工作(C++)

int test; 
    cout << "Enter the number:" << endl; 
    while(true) { 
    cin >> test; 
    if (!cin || test < 0) { 
     cout << "Wrong input, enter the number again:" << endl; 
     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    } 
+8

你確實是知道的['break'(http://en.cppreference.com/w/cpp/language/break)和['continue']( http://en.cppreference.com/w/cpp/language/continue)聲明,不是嗎? –

+1

代碼工作正常,一切都按照它應該的方式運行,但它沒有做你想做的。要做你想做的事情的唯一方法是讀取一個*字符串*,檢查字符串是否是一個整數格式,然後只將*字符串轉換爲一個整數。這是很多工作,所以除非你被告知你必須這樣做,否則我不會打擾。 – john

+0

不要使用* goto *!作爲@JoachimPileborg提到的 –

回答

1

testintistream >>運算符只是動態轉換爲int,然後,您將丟失小數部分。

喲可以將test定義爲float,並在需要時將其轉換爲int

編輯:回答你最後的編輯(我沒有刷新,所以我錯過了這部分),正在發生的事情是,如果沒有goto你循環兩次:

  1. 您輸入1.5
  2. test是1,如果你不輸入,所以cin沒有清理。
  3. 再次循環,cin立即返回。
  4. test是0因此如果語句和抱怨進入。

希望這有助於

0

試試這個:

int test; 
cout << "Enter the number:" << endl; 
while (true) 
{ 
    cin >> test; 
    if (!(test < 0 || !cin)) 
     break; 
} 
cout << "Your chosen number is: " << test << endl; 

這是你想要的嗎?

+0

不,它不是,程序無法正常工作。例如輸入「1.2」。休息並沒有什麼區別,我已經嘗試過了。 – user2992251

+0

是否可以使用字符串? – BoBaH6eToH