2011-09-22 115 views
0

我建立一個while循環,我想選擇R或H,我不想使用forloops,但我想它爲什麼當我輸入r或h它不斷重複無數次的使用開關對於這種情況?我不能讓它只說一次..While循環不斷重複

while (chooseMove == 'r' or 'h') 
{ 
    switch (chooseMove) 
    { 
    case 'r': 
      cout << "you chose r"; 

     break; 
    case 'h': 
     cout << "you chose h"; 
     break; 
    } 




} 

我也forloops嘗試過了,有同樣的問題,我不能弄明白

+0

你可能想在裏面添加一個'<< endl'! – mkb

回答

5

你的意思是while (chooseMove == 'r' or chooseMove == 'h')。目前什麼你寫相當於((chooseMove == 'r') or ('h')),並'h'計算爲true


也許你還要求與輸入邏輯求助:

char c; 
bool success = false; 

while (std::in >> c) 
{ 
    switch(c) { 
    case 'r': /* ... */ success = true; break; 
    case 'h': /* ... */ success = true; break; 
    } 

    if (success) break; 
} 

這如果輸入流已關閉也將終止,您可以使用success來檢查操作是否成功。

+4

是'or'真的是一個C++運算符嗎? – BlackBear

+1

@BlackBear:是的,它是'||'的替代方法。例如[see here](http://www.cplusplus.com/reference/clibrary/ciso646/) (頭文件本身並不需要)另一種流行的替代方法是'!!??!' –

+0

cool!我總是發現||煩人;)謝謝 – BlackBear

0

這是一個問題:

while (chooseMove == 'r' or 'h') 

試試這個:

while ((chooseMove == 'r') || (chooseMove == 'h')) 

當你寫(這是怎麼連編譯or不是C++?):

chooseMove == 'r' or 'h' 

它被解釋爲:

(chooseMove == 'r') or ('h') 

聲明'h'始終是真實的,所以while循環將永遠運行下去。

+0

'或'實際上是_is_ C++。 §2.13 –

+0

WHAAAT?時間讓麻省代碼可讀! – Blender

+0

IMO:我使用'||',因爲每個編碼器都知道它,並且熟悉它,而大多數人的事情'或'是一個錯誤:( –

2

因爲這就是你所編程序做。

如果您希望循環停止或暫停(並說等待輸入),您應該將該代碼添加到循環中。

while (chooseMove == 'r' or chooseMove == 'h') 
{ 
    switch (chooseMove) 
    { 
    case 'r': 
      cout << "you chose r"; 

     break; 
    case 'h': 
     cout << "you chose h"; 
     break; 
    } 
    std::cin >> chooseMove; //stop and wait for more input 
} 
+0

聖盃我甚至沒有意識到這一點,我看到因爲它現在要求值再次它需要知道去哪裏... – mystycs

+0

你和克雷克都有一半的答案。 – mkb

+0

哦,我專注於「不停止」的問題,他在「總是」部分。我的 –

0

是什麼chooseMove == 'r' or 'h'意思?根據C++標準 ,這被分組爲(chooseMove == 'r') or ('h');的'h'bool的 隱式轉換隨後導致(chooseMove == 'r') or ('h' != 0)。第二個條件永遠是真的。

0
while (chooseMove == 'r' or 'h') 

這相當於這個:

while ((chooseMove == 'r') or true) 
//same as while ((chooseMove == 'r') || true) 

因此,這是無限循環。請注意,or||是同一件事。

你想是什麼:

while ((chooseMove == 'r') or (chooseMove == 'h')) 
//same as while ((chooseMove == 'r') || (chooseMove == 'h'))