为什么此C程序不考虑for循环而输出“ 10”?

时间:2019-07-01 13:40:36

标签: c for-loop

#include <stdio.h>
int main()
{
  int i=10;
  for (int i=1;i<=20;i++)
    i++;
    printf("%d",i); 
  return 0;
}

我不明白,为什么此C程序总是只将输出打印为10,而不管在for循环中给出的条件如何。我试图通过在for (int i=1;i<=50;i++)之类的for循环中进行一些更改来执行它,但是它返回了相同的输出!这是怎么回事?

6 个答案:

答案 0 :(得分:6)

这是您的代码 实际上 所说的内容,并带有一些注释来说明

#include <stdio.h>
int main()
{
    int i=10;               // Variable i is declared (=10)
    for (int i=1;i<=20;i++) // DIFFERENT variable i is declared, hiding the first variable (=1).
    {
        i++;                // The inner-i variable increments: 3, 5, 7, .... 19
    }                       // inner-i is complete, and disappears.  It is no longer active.

    printf("%d",i);         // The original Variable i is printed.
                            // It still has value 10, as originally initialized.
    return 0;
}

答案 1 :(得分:5)

这是一个for循环,因此它会根据您在其标题i++中编写的内容递增。您无需通过再次执行i在循环主体中手动增加i++

此外,如果在循环之前声明变量i并编写for (int i=1;i<=20;i++),则它仅在循环范围内声明另一个变量。由于您没有在循环代码两边加上括号,因此循环代码仅由i++行组成。然后,for范围结束,并打印您先前声明的并初始化为10的“其他” i变量。

答案 2 :(得分:4)

printf("%d",i);不是for循环的一部分,只有i++是。缩进在C语言中并不重要,您需要使用块将操作分组在一起。例如

for (int i=1;i<=20;i++) 
{
    i++;
    printf("%d",i); 
}

答案 3 :(得分:4)

在C语言中,缩进不是块结构的一部分(就像在Python中一样)。

这意味着您的代码实际上是这样的:

#include <stdio.h>
int main()
{
  int i=10;
  for (int i=1;i<=20;i++)
    i++;  // In loop

  printf("%d",i);  // Not in loop
  return 0;
}

必须用大括号{}分隔代码块:

#include <stdio.h>
int main()
{
  int i=10;
  for (int i=1;i<=20;i++)
  {
    i++;  // In loop
    printf("%d",i);  // Also in loop
  }
  return 0;
}

答案 4 :(得分:1)

C不在乎缩进(它只在乎分隔令牌的范围内在空格)。如果您希望多个语句成为for循环(或while循环或if语句等)的一部分,则需要用花括号定界这些语句:

for ( i = 0; i < 10; i++ )
  printf( "this statement is part of the loop\n" );
  printf( "this statement is NOT part of the loop\n" );

vs。

for ( i = 0; i < 10; i++ )
{
  printf( "this statement is part of the loop\n" );
  printf( "so is this\n" );
}

使用大括号通常是一个好主意,即使您只有一条语句:

while ( some_condition )
{
  do_something();
}

您还创建了两个分别名为i的变量:

int i = 10; // first instance

for ( int i = 1; i <= 20; i++ ) // second instance of i "shadows" the first

之所以可行,是因为for循环创建了一个新的 scope ,并且您可以在不同作用域中使用相同的名称来命名变量。 i循环中的变量for隐藏或“遮盖”在程序开始时声明的变量i。当for循环退出时,在其中声明的i将不复存在,因此您将在程序开始时打印声明的i的值。

答案 5 :(得分:0)

缩进不是在C中定义代码块的必要部分。

根据此代码,您增加的'i'是与您想要的变量不同的变量。

等效代码为:

int main()
{
  int n=10;
  for(int i=1; i<=20;i++)   
    i++;
  printf("%d",n);
}

但是所需的代码是:

int main()
{
  int i=10;
  for(int i=1; i<=20;i++)
  {
    i++;
    printf("%d",i);
  }
}