首页 文章

C递归函数无限循环

提问于
浏览
-1

我有一个从另一个函数获取int值的函数 . 当我输入一个错误的int值时,它按预期工作(递归调用相同的函数并允许我输入一个新数字)但是当我输入除int(a,%等)以外的任何东西时,它会递归地调用该函数但会陷入困境无限循环 . 当我处于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());
    }

}

1 回答

  • 0

    函数 MainMenuSelection( int x ) 需要一个int . main函数中的函数调用认为它通过调用一个应该返回int的函数来获得它,即 int MainMenu() . 但是这个函数没有按照你用这种方式声明的函数所期望的那样 . 你应该确保一个函数应该总是返回值(除了当然是空的) .

    有像Cppcheck这样的静态代码分析器,它可以帮助您分析代码并找到可能的问题,如上所述 .

    另一个提示是考虑执行代码时会发生什么 . 特别是当您的代码仍然非常小时,您可以手动浏览语句以查看它所采用的路径,以便您可以找到程序失败的位置 .

相关问题