C语言if语句判断逻辑异常,变量打印值正常问题求助
问题原因
C语言不支持1 <= num <= 5这类连续区间比较的写法。<=运算符为左结合,该表达式的实际执行顺序是:
- 先计算
1 <= num,得到布尔结果(真为1,假为0) - 再将上述结果和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
相关产品推荐
相关产品推荐

