在C中执行for循环

时间:2015-12-03 02:24:13

标签: c for-loop

这个for循环是如何工作的

int main(){

char i = 0;

for(i <= 5&amp;&amp; i&gt; = - 1; ++ i; i&gt; 0)

printf("%d \n",i);

printf("\n");



return 0;

}

4 个答案:

答案 0 :(得分:2)

啊,谢谢你的澄清。

你问为什么你的例子中的for循环正在执行,即使已经交换了增量操作数和循环条件,以及变量是char的事实。让我们考虑for循环的正确结构:

for (initialise variable; for condition; increment variable)
{
      //Do stuff
}

你的问题的答案很简单:

  1. 你的病情增加了1,但正如你所指出的,我是一个炭。在char上使用操作数可以将其转换为另一种类型,包括int(引用C comparison char and int
  2. 循环将继续,直到其条件== false。
  3. 你的循环将继续运行,直到i = 0,这意味着它将继续增加1直到达到128,此时它将溢出到-128并继续增加直到它再次达到0。

答案 1 :(得分:1)

让我们看看for循环的名称部分:

for( Expr1; Expr2; Expr3 )
   DoStuff;

这是for循环的工作原理: 1.首先执行Expr1。在你的循环中实际上什么也没做,因为它没有检查执行的结果。

  1. 然后执行Expr2并将其结果视为条件,如果它0终止循环,如果它是&#34;&#34;不是0&#34;转到第3步。在你的循环中,这意味着i将递增,因此它现在为1,因此结果为true

  2. 然后它会运行DoStuff部分,在您的情况下打印出我的值

  3. 接下来它执行Expr3,不检查,只是运行它,在你的情况下什么都不做,因为它是一个条件,它的结果没有被使用。

  4. 接下来回到Expr2执行它并检查它的结果。现在i2,仍为true条件。

  5. 再次执行DoStuff部分并转到步骤4

  6. 一旦i值更改回0,循环就会停止。 什么时候?因为它的类型是char,在达到127之后它会溢出到-128然后再增加到-1然后是0.然后停止。

答案 2 :(得分:1)

每当你想在这种情况下理解for循环时,你可以将循环转换为while来理解它。

for语法为:

for (initialization; condition; operation)
    ...

它可以转换为while:

初​​始化; while(condition){     ...     操作; }

所以在你的情况下

i <= 5 && i >= -1;  // Initialization 
  while(++i) {                //condition
      printf("%d \n", i);
      i > 0;                // operation
  }

初始化部分将在检查条件后执行。在你的情况下它是++i所以每次递增。这里i>0表示如果i == 0那么循环将停止它不会问题i是正面还是负面在这种情况下要记住的Thumb规则是if(i == 0)然后true否则为false。 i>0仍然是真的)在每种情况下,所以循环是无限的。 要理解我在SO中看到的循环最佳答案是this

答案 3 :(得分:0)

关于for循环条件和递增操作的顺序没有规则,后者甚至不需要是递增操作。它的作用取决于你。代码与语义相同。

char i = 0;
i <= 5 && i >= -1;     // Run before the loop and only once. No real effect here.
while (++i) {          // Condition used to determine the loop should continue or break
    printf("%d \n", i);
    i > 0;             // Run every time inside the loop. No real effect here.
}

BTW:它将是一个无限循环(因为++i在溢出之前是非零值。)