2014-09-03 110 views
1

請注意,在用戶輸入之前,choiceOne_One等於0。
我有我的當前代碼的問題。我希望讓用戶能夠重新鍵入他們的輸入,直到它有效,而不必關閉程序並重新打開它。由於這一點(以及來自互聯網上其他人的建議),我添加了一個while循環,這看起來很穩固。 由於某些原因,當用戶輸入1時,它會循環顯示第一條if語句,就像輸入無效一樣,輸出「Woah!這不是一個選項..」等等。我不知道如何使這項工作,甚至有什麼問題。任何幫助將非常感激。if .. else ..語句不輸出預期的結果。雖然..循環問題?

cin >> choiceOne_One; 
    int whileInt=0; 

while(whileInt == 0) 
{ 

if (choiceOne_One != 1 || 2) 
    { 
     cout << "Woah! That wasn't an option! Try Again.\n"; 
    } 

else if (choiceOne_One == 1) 
    { 
     whileInt++; 
     cout << "One\n"; 
    } 


else if (choiceOne_One == 2) 
    { 
     whileInt++; 
     cout << "Two\n"; 
    } 
} 
+0

好吧,所以它總是進入那個'if'的身體。所以要把這個條件拿出來玩一下。 – chris 2014-09-03 23:10:47

回答

0

你必須完成你的if語句:

if (choiceOne_One != 1 && choiceOne_One != 2) 
    { 
    cout << "Woah! That wasn't an option! Try Again.\n"; 
    } 

||意味着or&&意味着and這樣兩個條件需要滿足它打印

1

我相信這是因爲你的if語句。您應該將其更改爲

if (choiceOne_One != 1 && choiceOne_One != 2) 

這是因爲'或'語句在當前代碼中未正確使用。通過具有

(choiceOne_One != 1 || 2) 

你基本上是說,

  • 如果(choiceOne_One!= 1)

OR

  • 如果(2)。

後一種說法總是如此,因爲在C++中,如果你有一個if語句後跟一個整數,它將簡單地返回布爾值「true」。

這裏的網站告訴你更多關於如何工作。 http://www.cplusplus.com/forum/articles/3483/

希望幫助:)

+0

@AlexD編輯,謝謝:) – jj172 2014-09-03 23:10:43

0

的問題是線if(choiceOne_One != 1 || 2)

則必須將此擴大到if(choiceOne_One != 1 && choiceOne_One != 2)

的原因是,在C++中,整數計算爲true如果他們是非零。所以你的原始聲明,choiceOne_One != 1 || 2變成choiceOne_One != 1 || true,當然與true的任何或者是true

+0

謝謝,我想我這樣寫的原因是因爲我仍然不熟悉C++,因爲java是我的第一語言。 – 2014-09-04 00:29:12

1

這個問題是由於choiceOne_One != 1 || 2被解析爲(choiceOne_One != 1) || 2而引起的,它總是被條件接受(因爲2是一個獨立於選擇的「真」值)。

[我建議]「修復」此代碼的方式是使用else,而不是更改條件,儘管這樣也可以。考慮;

if (choiceOne_One == 1) 
    { 
     whileInt++; 
     cout << "One\n"; 
    }  
else if (choiceOne_One == 2) 
    { 
     whileInt++; 
     cout << "Two\n"; 
    } 
else // only here if NONE of the above conditions are true 
    { 
     cout << "Woah! That wasn't an option! Try Again.\n"; 
    } 

此外,

  1. 閱讀內部迴路中的輸入值。目前choiceOne_One將永遠不會改變,而顯示的循環正在運行 - 這將導致立即終止的循環或永不終止
  2. whileInt可能/應該改變或消除 - 使用布爾標誌或中斷/返回。
0
cin >> choiceOne_One; 
while(true) 
{ 
if (choiceOne_One != 1 && choiceOne_One != 2) 
{ 
    cout << "Woah! That wasn't an option! Try Again.\n"; 
    cin >> choiceOne_One; 
}else if(choiceOne_One == 1){ 

    cout << "One\n"; 
    break; 

}else if (choiceOne_One == 2){ 
cout << "Two\n"; 
    break; 
} 
} 

對不起,我沒有C++編譯器來測試這個代碼,但我認爲這將與您

+0

這改變了代碼的輸出。 – user2864740 2014-09-04 03:12:22

+0

我剛編輯感謝 – 2014-09-04 08:47:59

0

作業編輯第一之後,如果()條件像有些人所指出的那樣,我意識到我仍然無法循着第一條語句無限循環地遇到問題。我也意識到這是因爲我沒有寫一行給用戶輸入另一個有效輸入內容的機會(感覺這很好)。於是,我熟練地剪下並貼上了「cin >> choiceOne_One;」從while()循環外部變成 while()循環和瞧!它的工作。回想起來,我早該注意到了。