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

使用MinGW编写的C语言简易计算器输入运算符后意外退出问题

问题分析与解决方案

你的程序输入运算符后意外退出,大概率不是编译器问题,核心是两个未处理的隐患:

1. 未实际处理除零错误

你代码里注释了“Handle division by zero”但没做判断逻辑。当第二个输入数为0时,执行(double)number1 / number2会触发浮点数异常,直接导致程序崩溃退出。

修复方法:在除法分支前添加判断:

case '/':
  if (number2 == 0) {
    printf("Error: Division by zero is not allowed\n");
    break;
  }
  result = (double)number1 / number2;
  printf("%.2lf / %.2lf = %.2lf\n", (double)number1, (double)number2, result);
  break;

2. getchar()的缓冲区处理有漏洞

你用getchar()吃掉换行,但如果用户输入数字后附带了其他字符(比如123 abc\n),scanf("%d")只会读取123,剩下的字符里getchar()只吃掉第一个,后续残留字符可能干扰输入逻辑(虽然后面scanf(" %c")的空格会跳过空白,但极端场景仍会出问题)。

更可靠的缓冲区清空方式是用循环吃掉所有字符直到换行:

// 替换原有的getchar()
while ((getchar()) != '\n');

修改后的完整代码

#include <stdio.h>

int main() {
  int number1, number2;
  double result;
  char op;

  printf("Enter the 1st number: v2 ");
  scanf("%d", &number1);
  while ((getchar()) != '\n'); // 清空输入缓冲区

  printf("Enter the 2nd number: ");
  scanf("%d", &number2);
  while ((getchar()) != '\n'); // 清空输入缓冲区

  printf("Enter an operator (+, -, *, or /) ");
  scanf(" %c", &op);

  switch (op) {
    case '+':
      result = number1 + number2;
      printf("%.2lf + %.2lf = %.2lf\n", (double)number1, (double)number2, result);
      break;

    case '-':
      result = number1 - number2;
      printf("%.2lf - %.2lf = %.2lf\n", (double)number1, (double)number2, result);
      break;

    case '/':
      if (number2 == 0) {
        printf("Error: Division by zero is not allowed\n");
        break;
      }
      result = (double)number1 / number2;
      printf("%.2lf / %.2lf = %.2lf\n", (double)number1, (double)number2, result);
      break;

    case '*':
      result = (double)number1 * number2;
      printf("%.2lf * %.2lf = %.2lf\n", (double)number1, (double)number2, result);
      break;

    default:
      printf("Invalid operator\n");
      break;
  }

  return 0; 
}

额外建议

编译时启用警告选项,比如执行gcc -Wall -Wextra calculator.c -o calculator,能帮你发现更多潜在问题——比如之前直接用%.2lf打印int类型变量,虽能运行但会触发编译器警告,显式转换为double更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:22:15