以下两个代码产生相同的输出但有一些我无法弄清楚的差异
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;
}
答案 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;
}
你看到了区别吗?一方面,您的决策基于被扫描的变量(x
或a
),另一方面基于scanf()
的返回值,这只是读取的值的数量:
while(a>0)
VS
while (scanf("%d",&a) > 0)
答案 1 :(得分:0)
在第一种情况下,它是简单的循环结构。
在第二种情况下。 For Loop
arguements
initialization of looping variable
,condition
和incrementation/decremenation
始终是选项。
这里为了省略循环初始化,条件scanf("%d",&x)
将返回没有从控制台正确读取的值,如果你给任何随机字符作为输入scanf返回0并且条件x!= 42
是显而易见的。 printf在递增/递减位置只打印。
只有当条件失败时,循环才会终止。