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

C语言中执行函数后如何返回main函数?求解决方案

C语言计算器循环运行问题的解决办法

问题出在哪

  1. 不能直接调用main():C标准明确禁止在用户代码里递归调用main,这属于未定义行为,你碰到的报错,是因为main函数在运算函数之后定义,编译器不知道main的存在。
  2. 函数声明顺序问题:如果把main移到代码前面,运算函数还没定义,编译器找不到这些函数的声明,自然会报错。

正确的解决思路

最优方案:函数声明+循环替代递归调用

先在代码开头声明所有运算函数,让编译器提前知道这些函数的存在,然后在main里用循环实现程序重复运行,运算函数执行完直接返回,不用调用main。

修改后的完整代码:

#include <stdio.h>
#include <conio.h>
#include <cbm.h>

// 提前声明所有运算函数,解决未定义报错
void addition();
void subtraction();
void multiplication();
void division();

int integer1;
int integer2;
int integer3;
int option;
char choice;

void addition (){
  integer3 = integer1 + integer2;
  printf("%d\n", integer3);
  integer1 = 0;
  integer2 = 0;
  integer3 = 0;
  // 直接返回,让main的循环继续
}

void subtraction (){
  integer3 = integer1 - integer2;
  printf("%d\n", integer3);
  integer1 = 0;
  integer2 = 0;
  integer3 = 0;
}

void multiplication (){
  integer3 = integer1 * integer2;
  printf("%d\n", integer3);
  integer1 = 0;
  integer2 = 0;
  integer3 = 0;
}

void division (){
  // 加个除数不为0的判断,防止程序崩溃
  if(integer2 == 0){
      printf("错误:除数不能为0\n");
      return;
  }
  integer3 = integer1 / integer2;
  printf("%d\n", integer3);
  integer1 = 0;
  integer2 = 0;
  integer3 = 0;
}

int main()
{ 
   // 用while(1)实现无限循环,直到用户选择退出
   while(1){
      printf("ADVANCED CALCULATOR VERSION 0.2\n");
      printf("CALCULATOR OPTIONS ARE:\n");
      printf("1. ADDITION\n");
      printf("2. SUBTRACTION\n");
      printf("3. MULTIPLICATION\n");
      printf("4. DIVISION\n");
      printf("5. ADVANCED OPERATIONS\n");
      printf("6. 退出程序\n"); // 新增退出选项,让程序可以正常结束
      printf("请选择操作选项:\n");
      scanf("%d", &option);
      
      if (option == 1){
          printf("输入第一个数:\n");
          scanf("%d", &integer1);
          printf("输入第二个数:\n");
          scanf("%d", &integer2);
          addition();
      }
      else if (option == 2){
          printf("输入第一个数:\n");
          scanf("%d", &integer1);
          printf("输入第二个数:\n");
          scanf("%d", &integer2);
          subtraction();
      }
      else if (option == 3){
          printf("输入第一个数:\n");
          scanf("%d", &integer1);
          printf("输入第二个数:\n");
          scanf("%d", &integer2);
          multiplication();
      }
      else if (option == 4){
          printf("输入第一个数:\n");
          scanf("%d", &integer1);
          printf("输入第二个数:\n");
          scanf("%d", &integer2);
          division();
      }
      else if(option == 6){
          printf("程序已退出\n");
          break; // 跳出循环,结束程序
      }
      else {
          printf("输入无效,请重新选择\n");
      }
   }
   return 0;
}

不推荐的方案:声明main后递归调用

虽然可以在运算函数前加int main();来解决未声明报错,但这种做法违反C标准,多次调用后会导致栈溢出,绝对不建议这么做。

额外提示

  • 尽量避免全局变量:你现在用的integer1等都是全局变量,容易引发意外错误,最好改成在函数间传递参数,比如void addition(int a, int b),调用时传入输入的数值。
  • 完善输入检查:比如处理用户输入非数字的情况,还有除法时的除数判断,让程序更健壮。

内容的提问来源于stack exchange,提问作者Mr Buddyboi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:06:18