2015-03-02 47 views
1

我在寫關於switch語句的基本程序。 5個選項菜單,如果使用輸入無效號碼,應再次提示用戶進行選擇(範圍從1-5)。在這裏我得到了什麼至今:switch語句C++ [默認部分]

#include <iostream> 
#include "Menu.h" 
using namespace std; 

void Menu::inputChoices() 
{ 
    int choice; 

    cout << "IHCC Computer Science Registration Menu" << endl; 
    cout << "1. Welome to Computer Programming in C++" << endl; 
    cout << "2. Welcome to Java Programming" << endl; 
    cout << "3. Welcome to Android Programming" << endl; 
    cout << "4. Welcome to iOS Programming" << endl; 
    cout << "5. Exit" << endl; 
    cout << "\nEnter your selection: " << endl; 

    while ((choice = cin.get()) != EOF) 
    { 
     switch (choice) 
     { 
     case '1': 
      cout << "Welcome to Computer Programming in C++" << endl; 
      break; 
     case '2': 
      cout << "Welcome to Java Programming" << endl; 
      break; 
     case '3': 
      cout << "Welcome to Android Programming" << endl; 
      break; 
     case '4': 
      cout << "Welcome to iOS Programming" << endl; 
      break; 
     case '5': 
      cout << "Exiting program" << endl; 
      break; 
     default: 
      cout << "Invalid input. Re-Enter your selection: " << endl; 
     } 
    } 
} 

該項目有3個文件,這是源文件。我的問題是,當我輸入一個數字在(1-5)的範圍內,開關的默認部分仍然顯示。我只想顯示我的選擇。任何人都可以幫助我!非常感謝您

+0

你好,如果其中一個答案幫助你解決了你的問題,請檢查它是否正確。如果沒有,我們可以嘗試進一步幫助你。 – usandfriends 2015-05-29 00:59:22

回答

2

您之所以獲得默認值的原因是因爲cin.get()正在讀取換行符(10)。

我不使用cin.get認爲是有道理的,因爲在這裏進入像23987928asdasf將輸出一噸的行...你應該使用cin >> choice和你的情況下,轉化成int秒。例如:

cin >> choice; 
switch (choice) 
{ 
    case 1: 
     cout << "Welcome to Computer Programming in C++" << endl; 
     break; 
    // ... 
    default: 
     cout << "Invalid input. Re-Enter your selection: " << endl; 
} 
+0

這將吃任何*'\ n'。如果您單獨按下Enter鍵,則會出現初始方法的「無效...」消息。爲了避免超級消息*和*維持我提到的行爲,應該使用額外的'cin.get();' – harper 2015-03-02 07:38:59

+0

@harper啊讀取不需要的'\ n',我看到...但是,添加額外的'cin .get()'只會修復這種情況,在每個case塊中寫入'cin.get()'都是多餘的。我只是刪除了第一部分,甚至試圖在這個實現中使用'cin.get()',因爲當你輸入'asdasd'或'2374'時,所有東西都會中斷... – usandfriends 2015-03-02 16:26:49

+0

@harper啊,對不起,修好了。我沒有看到他只有五個選擇,我的歉意。儘管如此,使用'cin >>'更短,並增加了可讀性。 – usandfriends 2015-03-02 16:55:50

0

應該處理回車鍵'\ n'。嘗試下面,看看它的工作原理:

while ((choice = cin.get()) != EOF) 
{ 
    case 1: 
    // ... 
    // Basic idea is read extra `\n` and ignore it. Use below if condition 
    default: 
     if(choice != '\n') 
      cout << "Invalid input. Re-Enter your selection: " << endl; 
} 
+0

這種方式解決了我的問題,但循環不起作用。任何想法如何? – 2015-03-03 01:49:29

+0

基本思想被讀爲'\ n'並忽略它。我只是通過在默認代碼塊內移動條件if(choice!='\ n')來更新代碼。 – vcp 2015-03-03 09:56:46