在以下程序中
#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用作条件,所以它只会在++i求0值时终止,所以你开始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那么约阿希姆就对这种行为做了很好的解释