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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:40:27