2017-10-17 18 views
1

我這段代碼的意圖是使用switch語句作爲一個項目我工作的一個簡單的控制菜單。這段代碼的問題是,第一個「COUT」語句打印出這樣兩次:創建一個簡單的控制菜單項目和循環輸出一個提示,更多的時間比預期的

你想怎麼辦? (按下一個字母):

你想怎麼辦? (按下一個字母):

而不是我的預期:

你想怎麼辦? (按下一個字母):

這裏是我的代碼(我刪除的情況下報表的可讀性內的一切):提醒我說,「CIN

char cMenu; 

while (true) { 
     cout << endl << "What would you like to do?" << endl <<"(Press a letter): " << endl; 
     cin >> cMenu; 

     switch (cMenu) 
     { 
     case 'C': 
     case 'c': 
     { 
      cout << "*"; 
      break; 
     } 
     case 'J': 
     case 'j': 
     { 
      cout << "*"; 
      break; 
     } 
     case 'S': 
     case 's': 
     { 
      cout << "*"; 
      break; 
     } 
     case 'X': 
     case 'x': 
      cout << "*"; 
      break; 
     } 
    } 
+1

您可能在流中正在通過'cin >> cMenu'(新行可能?)讀入流中的字符,但未由相應的switch語句處理,因此該循環實際上運行了兩次。嘗試在執行循環之前忽略'cin'流中的所有內容('cin.ignore(std :: numeric_limits :: max()); cin.clear();')。 – lcs

+0

哪個編譯器和操作系統您使用的?你確定你沒有其他'cout'某處'之開關語句中?原來,我無法在Windows上使用VS2013進行復制,也無法在Linux上使用g ++進行復制。 – Ron

回答

0

由於U/LCS。忽略「存在。

我的解決辦法是添加一行:

cin.ignore(100,'\n'); 

權之前,我輸入「c菜單」忽略任何領先的新線。