You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
    }
}
额外注意事项
  1. 你原代码中Fishing函数的定义在Menu函数之后,Menu调用Fishing时编译器无法提前识别函数类型,严格编译模式下会报错,所以需要在Menu函数之前添加函数前置声明
  2. abort()属于强制终止进程的接口,仅建议在发生严重不可恢复错误时调用,普通的用户输入非法场景建议做提示后引导用户重新输入即可。

内容的提问来源于stack exchange,提问作者Justin Nicholas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:54:07