2017-04-24 246 views
-4

为什么下面的代码导致无限循环?为什么for循环变成无限循环?

#include <stdio.h> 
void main() 
{ 
    int i; 
    for(i=0;i!=12;i++) 
    { 
    printf("%d\n",i); 
    i=12; 
    } 
} 
+3

'I ++'设置在循环结束excecuted所以我将成为'I = 13' –

+0

问自己是否(12 + 1)== 12是有史以来真。 – WhozCraig

+0

因为循环操作后'我++,所以你设置'I = 12'比你用'加一'执行我++'然后进行新的迭代用来检查是否'我!= 12' ..我建议你,如果你不完全不知道程序在做什么,用调试器找出它在做什么。 – Gondil

回答

1

i++在循环结束时excecuted所以i将成为13

2

因为i总是不等于12当它是由环检查。您每次循环迭代后执行i++,所以i总是等于13时,它的检查。

您可以完全省略i++部分,或者设置i = 11;来代替完成相同的操作。 (当然,因为在这种情况下,“同样的事情”是永远只希望在循环的单次迭代,你并不真的需要摆在首位的循环。但我认为这只是一个人为的学习锻炼。)

1

它发生是因为for循环检查循环条件前增加变量。

下面是与for循环改写为while循环的代码:

#include<stdio.h> 
void main() 
{ 
    int i; 
    i=0; 
    while(i!=12) 
    { 
    printf("%d\n",i); 
    i=12; 
    i++; 
    } 
} 

下面是它的输出(前几行):

0 
13 
13 
13 
... 

通过每一次循环中,代码将i设置为12,然后在检查条件并重新启动循环之前立即将其增加到13。该循环只会在i==12时终止,因此它将永远运行。