为何条件逻辑错误的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
相关产品推荐
相关产品推荐

