C语言程序调用Menu函数后未返回main执行后续代码问题求助
问题根源
你代码的问题出在Menu函数的分支判断逻辑存在错误,只要输入的数值不等于4,就会触发abort()直接终止整个程序,自然不会执行main函数中Menu()调用后的代码。
具体逻辑错误说明
你写的4个if是完全独立的分支,最后一个if (a == 4)对应的else仅和该if绑定:
- 无论你输入1、2、3中任意值,都会命中对应分支的逻辑,但后续执行到
if (a ==4)判断时,结果均为不成立 - 此时会直接进入
else分支调用abort(),该函数的作用是强制终止当前进程,不会返回main函数继续执行后续代码
修复方案
将独立if改为互斥的if-else if-else分支结构即可解决问题,修改后的Menu函数逻辑如下:
// 提前添加Fishing函数的前置声明,避免编译警告 void Fishing(); void Menu() { printf("What would you like to do: \n Fish = 1\n Hunt = 2 \n Cook = 3\n Boss = 4\n"); scanf("%d", &a); if (a == 1) { Fishing(); } else if (a == 2) { printf("Hunting\n"); } else if (a == 3) { printf("Cooking\n"); } else if (a == 4) { printf("Bossing\n"); } else { // 不要直接调用abort(),改为提示输入非法更合理 printf("输入无效,请输入1-4之间的整数\n"); } }
额外注意事项
- 你原代码中
Fishing函数的定义在Menu函数之后,Menu调用Fishing时编译器无法提前识别函数类型,严格编译模式下会报错,所以需要在Menu函数之前添加函数前置声明 abort()属于强制终止进程的接口,仅建议在发生严重不可恢复错误时调用,普通的用户输入非法场景建议做提示后引导用户重新输入即可。
内容的提问来源于stack exchange,提问作者Justin Nicholas
相关产品推荐
相关产品推荐

