-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;
}
*警告:控制可能會達到非void函數的末尾[-Wreturn-type] * – chris
Dev-C++ 4.9.9.2完全沒有wanring – Peter
@Peter然後,您不會在命令行上傳遞'-Wall'到GCC。你應該事實上通過'-Wall -Wextra -pedantic' –