如何用C语言switch语句更新全局变量?代码输出异常求助
问题排查与解决
问题核心是switch分支的匹配值类型不匹配,导致没有任何case被触发:
- 你定义的数组
marks中存储的是整数类型的0、1、2,它们的数值就是字面本身; - 但switch的case里写的是字符常量
'0'、'1'、'2',这些字符对应的ASCII值是48、49、50,和数组里的整数值完全不相等,所以所有case都不会命中,mmak始终没有被递增,最终输出0。
修复方案(二选一)
方案1:将case改为整数常量(最贴合当前代码逻辑)
把case里的字符常量换成对应整数值即可:
switch (sunk) { case 0: mmak++; break; case 1: mmak++; break; case 2: mmak++; break; }
方案2:调整数组为字符类型(若原本需求是处理字符)
如果你的初衷是处理字符,需要把数组元素和变量类型都改成字符:
char marks[3][3] = {{'0','5','6'}, {'1','5','9'}, {'2','9','5'}}; // ... char sunk = marks[k][0];
另外补充:代码中printf的格式字符串存在换行符缺失问题,建议修正为printf("%i\n", mmak);,保证输出后自动换行。
内容的提问来源于stack exchange,提问作者Rifat Ahmed
相关产品推荐
相关产品推荐

