为什么C语言开发的电阻色环计算器中switch case总是触发default分支?
问题根源
- 你代码里通过运算得到的
a/b/c都是整数数值,比如当a计算结果为1时,存储的就是整数1;但你switch的case条件写的是'0'、'1'这类字符字面量,C语言里单引号包裹的字符实际对应的是ASCII编码值,比如'0'对应整数48,'1'对应49,二者数值完全不匹配,所以永远触发default分支。
修复方案
- 直接把所有case里的单引号去掉,改成匹配整数即可,修改后的switch结构参考:
switch (a) //colour band for first digit// { case 0: printf("black "); break; case 1: printf("brown "); break; case 2: printf("red "); break; case 3: printf("orange "); break; case 4: printf("yellow "); break; case 5: printf("green "); break; case 6: printf("blue "); break; case 7: printf("violet "); break; case 8: printf("grey "); break; case 9: printf("white "); break; default: printf("unknown value "); }
- 匹配第二位有效数字、公差的另外两个switch分支也按照同样规则修改即可正常匹配。
额外注意事项
- 你当前的取值逻辑仅支持三位数及以下的整数值电阻,如果你要处理更大阻值、带小数的阻值或者不同精度的色环规则,还需要补充有效数字提取、倍率计算的逻辑。
内容的提问来源于stack exchange,提问作者brelektro
相关产品推荐
相关产品推荐

