2015-06-07 73 views
-1

我正在處理一個需要顯示一些菜單的項目,其中一些菜單有子菜單。到目前爲止,我已經創建了一個函數,它返回用戶選擇的字符,問題是,在菜單之間來回返回值是垃圾之後,它與cin已被刷新,但我只是可以找不到需要清理的「現貨」... 我試過cin.clear();在各種不同的地方,結果不一樣,我錯過了什麼?C++遞歸函數與switch()返回錯誤的數據

輸出:

#include <iostream> 
#include <string> 
#include <vector> 
#include <exception> 
#include <istream> 
using namespace std; 

char Menu() { 
    char ch; 
    //ch = NULL; 
    //cin.clear(); 
    cout << "++++++++++++++++++++++++++++++++++++++++++++" << endl; 
    cout << "+    MAIN MENU     +" << endl; 
    cout << "++++++++++++++++++++++++++++++++++++++++++++" << endl; 
    cout << "| 1. Enter a new contract.     |" << endl; 
    cout << "| 2. Cancel an active conract.    |" << endl; 
    cout << "| 3. Edit a cotract.      |" << endl; 
    cout << "| 0. Exit         |" << endl; 
    cout << "++++++++++++++++++++++++++++++++++++++++++++" << endl; 
    cin >> ch; 

    switch (ch) { 
     //cin.clear(); 
     case '1': 
      return ch; 
      break; 
     case '2': 
      return ch; 
      break; 
     case '3': 
      //cin.clear(); 
      cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl; 
      cout << "+    -== Edit a cotract ==-     +" << endl; 
      cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl; 
      cout << " What would like to edit?        |" << endl; 
      cout << " a) Cover amount.          |" << endl; 
      cout << " b) Add a family memeber.(Applyes to Health insurances) |" << endl; 
      cout << " 0. Return            |" << endl; 
      cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl; 
      cin >> ch; 
      if(ch == '0') {  
       //cin.clear();  
       Menu(); 
      } else if((ch >= 'a') && (ch <= 'b')) { 
       return ch; 
      } else { 
       cout << "Wrong input ! ! !" << endl; 
       Menu(); 
       return ch; 
      } 
      break; 
     case '0': 
      cout << "Exiting bye!" << endl; 
      break; 
     default: 
      cout << "Wrong input ! ! !" << endl; 
      Menu(); 
      break; 
    }   
} 

int main() { 
    char choise; 
    choise = Menu(); 
    cout << "selected: " << choise << endl; 

    system("PAUSE"); 
    return 0; 
} 
+4

*警告:控制可能會達到非void函數的末尾[-Wreturn-type] * – chris

+0

Dev-C++ 4.9.9.2完全沒有wanring – Peter

+0

@Peter然後,您不會在命令行上傳遞'-Wall'到GCC。你應該事實上通過'-Wall -Wextra -pedantic' –

回答

2
 default: 
       cout << "Wrong input ! ! !" << endl; 
       Menu(); 
       break; 

你叫另一Menu()獲取輸入,但沒有返回它的返回值呼叫者main()

將其更改爲return Menu();

+0

實際上,我把兩個返回語句放到'返回Main()',但是在一些來回之後似乎「失去它」再次 – Peter