我不明白这个程序是如何工作的

Raj*_*yan 1 c

在以下程序中

#include<stdio.h>   
int main()    
{    
    char i=0;    
    for(i<=5 && i>=-1;++i;i>0)   
        printf("%d\t",i);
    return 0;    
}    
Run Code Online (Sandbox Code Playgroud)

'我'从1到127打印,然后从-128打印到-1.

为什么会这样?

Dan*_*n F 14

这一直是我生命中见过的最糟糕的循环.For循环的格式如下

for ( initalization; condition; update )
Run Code Online (Sandbox Code Playgroud)

for循环开始时,initialization发生.这通常是这样的i = 0.在每个循环的顶部,condition(通常是类似的i < 5)被评估,以便查看循环是否应该继续,并且如果循环继续,update则执行(再次,通常是类似的++i),并且循环再次执行.

这里发生了什么,是循环++i用作条件,所以它只会在++i0值时终止,所以你开始1并递增直到char i溢出128-127,然后继续递增直到它到达-1,此时++i计算到0和循环终止

编辑

所以根据你的代码,i<=5 && i>=-1在循环的第一次迭代的最开始执行(这完全没有任何结果),然后++i评估布尔状态(0要开始,并使用预增量,评估是1因此,而不是0boolean传递),然后执行的update部分i>0,再一次,什么都不做.

EDIT2

如果你的问题确实是为什么会这样,1,2....128,-127,-126....-1那么约阿希姆就对这种行为做了很好的解释

  • @ Mr.Alien:直接向上循环毫无意义. (3认同)