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

为何条件逻辑错误的IF语句仍修改了变量test的值?

问题分析与修正

错误点说明

  • 逻辑表达式写法错误:你写的item[i] == 0 || 255不符合C语言逻辑判断规则。在C中,非零值会被视为布尔真,255本身是真,所以不管item[i]是什么值,这个表达式的结果永远为真,导致整个if条件恒成立。正确写法应该是判断元素等于0 或者 等于255,即item[i] == 0 || item[i] == 255。
  • 数组越界访问:你定义的item数组只有4个元素,索引范围是0~3,但代码中访问了item[i+4](即item[4]),这属于越界访问,触发未定义行为,可能带来不可预料的结果。

修正后的代码

#include <stdio.h>

int main()
{
    int item[4] = {1,2,3,4};
    int test = 0;

    printf("test: %d\n", test);
    int i = 0;
    // 修正逻辑表达式,移除越界的数组访问判断
    if( (item[i] == 0 || item[i] == 255) && 
        (item[i+1] == 0 || item[i+1] == 255) && 
        (item[i+2] == 0 || item[i+2] == 255) && 
        (item[i+3] == 0 || item[i+3] == 255) )
    {
        test = 1;
    }

    printf("test after if:%d\n\n\n", test);
    return 0;
}

修正后运行代码,test会保持为0,符合你的预期。

内容的提问来源于stack exchange,提问作者noob0 0 00 0 0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:30:58