-1
我有一個函數,它接受來自另一個函數的int值。當我輸入一個錯誤的int值時,它按預期工作(遞歸地調用相同的函數&讓我輸入一個新的數字),但是當我鍵入除int(a,%等)之外的任何東西時,它會遞歸地調用函數,但會卡住一個無限循環。任何幫助/見解都會很棒,因爲我處於C++編程的學習階段。C++遞歸函數無限循環
這裏是我完整的代碼片段(49線)
要總結一下我問的是我會怎樣正確去顯示錯誤並返回返回到主菜單而不觸發無限循環,當非int值給出。
int MainMenu();
void MainMenuSelection(int x);
int main()
{
MainMenuSelection(MainMenu());
return 0;
}
int MainMenu() {
int selection;
std::cout << "C++ Tutorials Main Menu\n";
std::cout << "----------------------------------------------\n";
std::cout << "1 - Chapter #1\n";
std::cout << "2 - Chapter #2\n";
std::cout << "3 - Chapter #3\n";
std::cout << "----------------------------------------------\n";
std::cout << "Please enter a cooresponding value: ";
std::cin >> selection;
if (std::cin.fail()) {
std::cout << "Input must be an integer";
}
else {
return selection;
}
}
void MainMenuSelection(int x) {
if (x == 1) {
std::cout << "\nChapter #1 is unavailable.\n";
std::cout << std::string(22, '\n');
MainMenuSelection(MainMenu());
}
else if (x == 2) {
std::cout << std::string(2, '\n');
ChTwoMenuSelection(ChTwoMenu());
}
else if (x == 3) {
std::cout << std::string(2, '\n');
ChThreeMenuSelection(ChThreeMenu());
}
else {
std::cout << "\nThere was an incorrect value submitted.";
std::cout << std::string(22, '\n');
MainMenuSelection(MainMenu());
}
}
如果一個函數聲明返回一個值,但它實際上沒有這樣做,那麼你有*未定義的行爲*。在你的情況下,有一個執行路徑,你*不''返回任何'MainMenu'函數。 –
另外,你爲什麼使用遞歸調用而不是循環?在你的情況下,循環會更有意義。 –
正如'一些程序員夥計'所說:在這裏,你是不是**返回任何東西,但你必須:'如果(std :: cin.fail()){std :: cout <<「輸入必須是一個整數」 ; }'。 –