我有一个从另一个函数获取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 回答
函数
MainMenuSelection( int x )
需要一个int . main函数中的函数调用认为它通过调用一个应该返回int的函数来获得它,即int MainMenu()
. 但是这个函数没有按照你用这种方式声明的函数所期望的那样 . 你应该确保一个函数应该总是返回值(除了当然是空的) .有像Cppcheck这样的静态代码分析器,它可以帮助您分析代码并找到可能的问题,如上所述 .
另一个提示是考虑执行代码时会发生什么 . 特别是当您的代码仍然非常小时,您可以手动浏览语句以查看它所采用的路径,以便您可以找到程序失败的位置 .