[英]Why does this C program print output “10” irrespective of the 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循环中进行一些更改来执行它,例如for (int i=1;i<=50;i++)
,但是它返回了相同的输出! 这是什么错误?
这就是您的代码实际所说的,并带有一些注释来说明
#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;
}
这是一个for
循环,因此它会根据您在其标题中写的内容递增: i++
在这里。 您不需要通过再次执行i++
在循环主体中手动递增i
。
除此之外,如果在循环之前声明变量i
并写for (int i=1;i<=20;i++)
,则它仅在循环范围内声明另一个变量。 由于您没有在循环代码周围放置任何括号,因此循环代码仅由i++
行组成。 然后, for
范围结束,并打印您先前声明的“ other” i
变量,并将其初始化为10。
printf("%d",i);
不是for
循环的一部分,只有i++
是。 缩进在C语言中并不重要,您需要使用块将操作分组在一起。 例如
for (int i=1;i<=20;i++)
{
i++;
printf("%d",i);
}
在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;
}
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" );
与
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
循环创建了一个新范围 ,并且您可以在具有相同名称的不同范围中使用变量。 for
循环中的变量i
隐藏或“阴影”了在程序开头声明的变量i
。 当for
循环退出时,其中声明的i
不再存在,因此您要在程序开始时打印声明的i
的值。
缩进不是在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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.