C语言if-else逻辑异常:两段代码行为不一致求助
两段C代码的逻辑差异分析
先把两段代码整理清晰:
代码1:
while((c=fgetc(fp))!=EOF) { if(j==3&&c!=' ') { printf("%c",c); j++; } else if(j!=3) { printf("%c",c); j++; } }
代码2:
while((c=fgetc(fp))!=EOF) { if(j==3&&c!=' ') printf("%c",c); else if(j!=3) printf("%c",c); j++; }
核心差异在于j++的执行时机:
- 代码1里,
j++放在每个条件分支内部,只有满足分支条件(要么j==3且c不是空格,要么j不等于3)时,才会执行j++。 - 代码2里,
j++放在if-else结构外面,不管是否满足任何分支条件,每次循环都会执行j++。
最关键的区别场景是当j==3且c==' '时:
- 代码1:两个分支都不匹配,既不会输出空格,也不会执行
j++——j会一直停在3,后续循环会持续判断这个条件,直到读到非空格字符才会输出并让j递增。 - 代码2:同样两个分支都不匹配,不会输出空格,但
j++会执行——j直接变成4,下一次循环就会进入j!=3的分支,开始输出后续所有字符。
这就是两段代码运行行为不同的根本原因。
内容的提问来源于stack exchange,提问作者Vinayak Deshmukh
相关产品推荐
相关产品推荐

