“for(i=1;i<=10;i++)" and "for(i=1;i<=10;i++); ". How does the code work in both the cases?

问题描述 投票:0回答:1

当两个表达式都被打印时,都会给出不同的输出。 当第一个程序执行时,我得到从 1 到 10 的数字,当执行第二个代码时,我只得到 11 作为输出。 为什么会出现这种情况?添加分号如何改变代码的输出?

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

//program 2
#include<stdio.h>
int main()
{ 
 int i;
 for(i=1;i<=10;i++);
 {
   printf("%d",i);
 }
} 
c for-loop expression
1个回答
0
投票

分号表示操作结束。所以,当你有

for(i=1;i<=10;i++);

基本上你说让我们在

i
的帮助下循环,最初是1,最后是10,每次步进1,不做任何其他事情。当你说:

for(i=1;i<=10;i++) { /* ... */ }

基本上你说让我们在

i
的帮助下循环,最初是1,最后是10,每次步进1,执行块内的代码(无论它是什么)。所以,你的

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

i
的帮助下循环,从 1 变为 10,每一步递增,并且在任何步骤中不执行任何操作。循环结束后,
printf
会被执行并打印11,因为
i
在循环过程中增加了1,2,3,4,5,6,7,8,9,10,11,直到
的条件i <= 10
变为 false,
i
变为 11,当您的代码到达执行循环后的代码时,它会打印
i
,此时为 11。相比之下:

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

是一个循环,其中

i
将获取 1、2、3、4、5、6、7、8、9、10 的值,并为每个值执行
printf
。然后,
i
像往常一样递增,变成11,因此循环条件不再为真,循环将不再执行附加的代码块。

© www.soinside.com 2019 - 2024. All rights reserved.