以下代码之间的差异

时间:2014-11-05 06:10:45

标签: c

以下两个代码产生相同的输出但有一些我无法弄清楚的差异

1

#include<stdio.h>
int main(void)
{
    int a=1;
    while(a>0)
    {
        scanf("%d",&a);
        if(a != 42)
            printf("%d\n",a);
        else
            break;
    }
}

2

#include <stdio.h>

int main(void) {
  int x;
  for(; scanf("%d",&x) > 0 && x != 42; printf("%d\n", x));
  return 0;
}

2 个答案:

答案 0 :(得分:4)

工作是不同的,因为语义不同,因为代码是不同的。

如果您想将第二部分重写为第一部分,您将获得

#include <stdio.h>

int main(void) {
  int x;
  while (scanf("%d",&x) > 0 && x != 42) {
      printf("%d\n", x);
  }
  return 0;
}

int main(void) {
  int a;
  while (scanf("%d",&a) > 0) {
      if (x != 42) {
          printf("%d\n", x);
      } else {
          break;
      }
  }
  return 0;
}

你看到了区别吗?一方面,您的决策基于被扫描的变量(xa),另一方面基于scanf()的返回值,这只是读取的值的数量:

while(a>0)

VS

while (scanf("%d",&a) > 0)

答案 1 :(得分:0)

在第一种情况下,它是简单的循环结构。

在第二种情况下。 For Loop arguements initialization of looping variableconditionincrementation/decremenation始终是选项。

这里为了省略循环初始化,条件scanf("%d",&x)将返回没有从控制台正确读取的值,如果你给任何随机字符作为输入scanf返回0并且条件x!= 42是显而易见的。 printf在递增/递减位置只打印。

只有当条件失败时,循环才会终止。