2014-11-05 97 views
-2

以下两个代码产生相同的输出,但之间有一定的diffrence我无法弄清楚Diffrence以下代码

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; 
    } 
} 
#include <stdio.h> 

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

是的,使用不同的循环指令。 – 2014-11-05 06:12:16

+0

是的正确,但工作是不同的,那是什么让我困扰 – Scriptonist 2014-11-05 06:14:10

回答

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) 

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

非常感谢你。 – Scriptonist 2014-11-05 06:25:34

0

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

在第二种情况下。 For Looparguements类似initialization of looping variableconditionincrementation/decremenation总是选项。

此处For循环初始化被省略,条件scanf("%d",&x)将返回从控制台正确读取的任何值,如果您给任何随机字符作为输入scanf返回0并且条件x!= 42是显而易见的。 printf在增加/减少的地方打印。

仅当条件失败时循环终止。

+0

非常感谢答复! – Scriptonist 2014-11-07 11:25:06

+0

@AravindKp如果你认为答案有帮助,可以投票 – saikumarm 2014-12-10 12:21:16