首先我们我来一段代码,看看它有什么错误:
for(i = 0,printf("First = %d\t",i);
i < 5,printf("Second = %d\t",i);
i++,printf("Third = %d\t",i))
{
printf("Fourth = %d\n",i);
}
有没有感觉for循环里面的表达式好复杂,但是语句绝对没有错误,编译没有错误,但是运行呢?
但是是一个死循环,一直都跳不出来。
问题在于for循环的语句形式是:
for(表达式1;表达式2;表达式3){}
而表达式1和表达式2都是逗号表达式,逗号表达式的用法不细说了,最终的值是最后一个表达式的值。
也就是printf这个函数的返回值,printf的函数的返回值是打印出来的字符的个数。
来看我调试的结果:
当i=0时,for循环体内执行后:
1)执行表达式3: i++; i=1,printf表达式的值是“Third = 1”数一下是9个字符,有两个空格,别忘了还有后面的“\0”,总共是10个字符。
2)然后计算表达式2: i<5, printf表达式的值是“Second = 2”是11个字符,表达式=11,为真,进入循环体。
3)执行循环体输入i,然后再是表达式3,i++; i=2;
因为表达式2的值永远为真,所以循环一直在运行,我改了一下可以参考:
int main()
{
int i;
for(i=0;
i<3;
i++)
{
printf("i=%d\n",i);
}
for(i = 0,printf("First = %d\t",i);
printf("Second = %d\t",i),i < 5;
i++,printf("Third = %d\t",i))
{
printf("Fourth = %d\n",i);
}
printf("\n");
printf("2/(-2) = %d\t",2/(-2));
printf("2%%(-2) = %d\t",2%(-2));
system("pause");
return 0;
}
看一下运行结果:
说明:
1)表达式1的first是赋初值,只执行一次。
2)表达式2Second是条件判断,条件满足执行循环体,然后再是表达式3,注意顺序。
3)从结果可以看出第一次的顺序是1,2,4,3 再后面的顺序是:
2(表达式2),4(循环体),3(表达式3)
2(表达式2),4(循环体),3(表达式3),
直到最后判断表达式2的结果为假,循环退出。