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

C语言if语句判断逻辑异常,变量打印值正常问题求助

问题原因

C语言不支持1 <= num <= 5这类连续区间比较的写法。<=运算符为左结合,该表达式的实际执行顺序是:

  1. 先计算1 <= num,得到布尔结果(真为1,假为0)
  2. 再将上述结果和5比较,1和0都满足<=5的条件,因此第一个if判断永远为真,无论num实际取值是多少都会进入numMoves = 3的分支,导致逻辑异常。
修复方案

将每个区间判断拆分为两个独立的比较条件,用逻辑与运算符&&连接,只有同时满足上下限要求时才会进入对应分支。同时建议给numMoves设置初始默认值,避免未匹配到任何分支时返回未初始化的垃圾值。

修复后的代码如下:

int getRoll(char letter) {
    int num = (rand() % 10) + 1;
    char plyr = letter;
    int numMoves = 0; // 初始化默认值

    switch (plyr) {
        case 'T':
            printf("This is the random number: %d", num);
            if (num >= 1 && num <= 5) {
                numMoves = 3;
            } else if (num >= 6 && num <= 7) {
                numMoves = -6;
            } else if (num >= 8 && num <= 10) {
                numMoves = 1;
            }
            break;
        // 后续补充其他case分支
        default:
            // 可在这里处理其他字符的默认逻辑
            break;
    }

    return numMoves;
}

内容的提问来源于stack exchange,提问作者T.Cahill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:03