私は別の関数から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'関数から何も返さない実行パスがあります。 –
また、なぜループの代わりに再帰呼び出しを使用していますか?あなたの場合、ループはより意味をなさないでしょう。 –
「いくつかのプログラマーの男」と言ったところ:ここでは何も返さない**しかし、あなたは次のことをしなければならない:if(std :: cin.fail()){std :: cout << "入力は整数でなければならない" ; } '。 –