为什么这个for循环表现得像这样?

时间:2015-01-08 14:58:44

标签: c for-loop

我对C很新,请原谅我,如果低于q。已被问到, 我看了一个c程序如下:

#include <stdio.h>

main() {

    int i;

    for (i=1;i<=5;printf("%d\n",i))
    i++;

}

我的输出为:

2
3
4
5
6

但我不明白为什么? 很抱歉给您带来不便。意外放置for循环后面的分号。 但我认为输出应该是1,2,3,4,5,因为printf语句是在增量运算符之前。

7 个答案:

答案 0 :(得分:2)

你的循环是无限的,因为你永远不会制造阻止它的东西!所以它只是继续打印1!

for (i=1;i<=5;printf("%d\n",i));
                             //^And your loop ends here

修改

如果你没有分号那么输出就是因为for循环的方式有效!

       1      2, 5         4
       |      |            |
      \/     \/           \/
for(i = 0; i <= 5 ; printf("%d\n",i)) {
    //3 Go through the body
    i++;
}

在5之后它进入2,3,4,5直到条件为假

答案 1 :(得分:1)

for (i=1;i<=5;printf("%d\n",i))

第3个表达式被评估为循环中的最后一个语句,因此在执行第一个printf()时,i的值为2

因此循环保持打印值直到i<=5

我希望循环结束时的;是偶然的。因为结果不符合显示的循环。

for (i=1;i<=5;printf("%d\n",i));

这是一个无限循环,因为i永远不会增加

答案 2 :(得分:1)

猜测循环后的分号是偶然的,for循环由四部分组成:

  1. 初始化表达式
  2. 条件
  3. 迭代表达
  4. 循环体
  5. 初始化表达式(1)在循环之前完成。当条件(2)为真时,循环将循环。循环将在每次迭代时执行循环体(4),然后然后将执行迭代表达式(3)。

    让我们进行for循环:

    for (i = 1; i <= 5; printf("%d\n", i))
    {
        i++;
    }
    

    这相当于

    i = 1;
    while (i <= 5)
    {
        i++;
        printf("%d\n", i);
    }
    

    这应该可以很容易地看出你获得输出的原因。

答案 3 :(得分:0)

在你完成循环后,printf就会发生。

通常情况下,循环计数器会放在那里。

你可以这样看: for(i = 1; i&lt; = 5; printf(“%d \ n”,i ++));

或者你有一个不同的问题,除了它开始打印2?

答案 4 :(得分:0)

你只需要了解 for 循环是如何工作的。for循环的语法是

for ( 1.variable initialization ; 2.condition ; 4.variable update )
    {
       3.code // 
    }

因此,在第一次迭代的示例中, i 将取值1。之后将检查条件是否为真。是1小于5,因此代码将被执行。 i++表示现在 i 为2.然后它将由printf()函数打印。所以现在 i 是2,条件将被检查,是的再次为真所以循环将执行相同的步骤并将打印3,依此类推,直到条件为假。 你也有一个错字。其他用户提到的分号。

答案 5 :(得分:-1)

当你放一个;循环之后,像这样

for (something);
while (something);

这意味着您希望循环体执行 nothing

如果你写

for (something);
    i++;

你的循环会运行,然后我会增加。一旦在循环之后,而不是每次。

我怀疑这是一个错字,因为你所描述的。

真正的问题是当你执行for(;;printf())时,在循环体后执行。在循环体中你做我的++。 你在打印之前递增了我。

答案 6 :(得分:-2)

EIDT:我没有看到`for(i = 1; i&lt; = 5; printf(&#34;%d \ n&#34;,i));那个分号。

for(i = 1; i <= 5; printf(&#34;%d \ n&#34;,i));     我++;

  • i=1 ---你将1调整为i;
  • i<=5 ---而i == 5或i&lt; 5重复循环

    • printf("%d\n", i) - 在屏幕i上打印,如果你写的话也一样 像这样的东西 - &gt;

      for(i = 1; i <= 5;) {   的printf(&#34;%d \ n&#34;,i)的;   我++;          }

因为for的第三部分循环在循环的底部执行。 你也可以这样做:

for (i=1;i<=5;printf("%d\n",i), i++)
      ;