我们在学习C语言的时候一定少不了使用for循环,大家对此都很熟悉吧,我原先以为自己对for循环的使用了如指掌,那还不是小菜一碟,结果在看《C语言深度剖析》一书时遇到一个课后问题就把我难住了。
int main(void)
{
int i = 0;
for(i = 0,printf("first = %d\n",i);
i < 10,printf("second = %d\n",i);
i++,printf("third = %d\n",i))
{
printf("fourth = %d\n",i);
}
return 0;
}
就是这个程序,大家第一眼看过去一定会认为非常简单吧,其实我刚开始也这么觉得的,然后在Linux上跑了一下,发现是个死循环,一直在打印。想了好久都没想通,后面问了下前辈才解决,这里总结下。为什么会陷入死循环呢?肯定是判断语句出了问题(马后炮,哈哈,自己不动脑子),系统把判断语句当成了一个整体,i<10满足了但是可别忘了后面还有printf语句,系统认为它也是判断条件,但是这个printf是没有办法为假的,所以程序会一直运行下去。我们不妨试一下。
int main(void)
{
int i = 0;
for(i = 0,printf("first = %d\n",i);
i < 10,i<5;
i++,printf("third = %d\n",i))
{
printf("fourth = %d\n",i);
}
return 0;
}
各位可以试一下,也许有些人可能还有疑问,为什么first只打印一次呢,为什么fourth会先third打印出来呢?这就和printf的运行机制有关了。在整个循环周期中,初始化语句只会执行一次,当执行完判断语句后,程序会立马运行{}里的语句,然后再去运行()里的第三条语句。