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

C语言switch case执行所有分支问题排查 四则运算代码示例

问题说明

C语言初学者初次使用switch...case编写简易四则运算计算器,预期流程为:提示用户输入+、-、*、/四类运算符之一,再输入两个操作数,最终输出对应运算的结果。实际运行时,程序匹配到目标运算符的分支后,会顺次执行后续所有case分支和default分支的代码,输出结果不符合预期。
原始代码如下:

#include <stdio.h>

int main() {

  char op;
  double first, second;
  printf("Enter an operator (+, -, *, /): ");
  scanf("%c", &op);
  printf("Enter two operands: ");
  scanf("%lf %lf", &first, &second);

  switch (op) {
    case '+':
      printf("%.1lf + %.1lf = %.1lf", first, second, first + second);
    case '-':
      printf("%.1lf - %.1lf = %.1lf", first, second, first - second);
    case '*':
      printf("%.1lf * %.1lf = %.1lf", first, second, first * second);
    case '/':
      printf("%.1lf / %.1lf = %.1lf", first, second, first / second);
    default:
      printf("Error! operator is not correct");
  }

  return 0;
}
故障原因

C语言的switch...case默认存在*分支穿透(fall-through)*特性:case本质是switch代码块内的位置标签,不是独立代码段的边界。当switch的表达式值匹配到某个case标签后,程序会从该标签位置开始顺序执行后续所有代码,不会在单个case的逻辑执行完毕后自动跳出switch结构。只有显式调用break语句,才能终止当前分支的执行,直接跳出整个switch块。
当前代码的所有case分支末尾都未添加break语句,因此匹配到目标运算符分支后,程序会继续执行后续所有分支的逻辑,导致输出错乱。
额外提示:除法运算需要额外判断除数是否为0,否则会触发除零运行错误。

修复后实现
#include <stdio.h>

int main() {

  char op;
  double first, second;
  printf("Enter an operator (+, -, *, /): ");
  scanf("%c", &op);
  printf("Enter two operands: ");
  scanf("%lf %lf", &first, &second);

  switch (op) {
    case '+':
      printf("%.1lf + %.1lf = %.1lf", first, second, first + second);
      break;
    case '-':
      printf("%.1lf - %.1lf = %.1lf", first, second, first - second);
      break;
    case '*':
      printf("%.1lf * %.1lf = %.1lf", first, second, first * second);
      break;
    case '/':
      if (second == 0) {
        printf("Error! Divisor cannot be 0");
        break;
      }
      printf("%.1lf / %.1lf = %.1lf", first, second, first / second);
      break;
    default:
      printf("Error! operator is not correct");
  }

  return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:24:25