2013-05-07 71 views
-1

想这while循环:编译器如何处理`(c = getchar())!= EOF`?

while ((c = getchar()) != EOF) 
     ^^^^^^^^^^^^^  
     assignment 

正如你可以看到,我们要分配比较EOF,怎么可能发生?据我知道,所以你不能比较的分配任务不返回任何值(是吗?)

+1

赋值通常会返回值:您可以将它用于“a = b = c = 0;”或者在您的示例中的条件中... – 2013-05-07 10:04:16

+1

它是一种表达式,而不仅仅是C语言中的赋值。 – BLUEPIXY 2013-05-07 10:05:41

+0

您需要习惯(子)表达式的**值**和**副作用**的概念。无论用户输入什么,'c = getchar()'的**值**基本上都是。 **副作用**正在改变'c'的值。 – pmg 2013-05-07 10:08:37

回答

3

赋值表达式返回分配的值,在你是比较的的while ((c = getchar()) != EOF)情况来自标准输入(什么getchar()返回 - 这是分配值)的下一个字符与EOF

0

无论何时调用getchar(),它都会读取输入的下一个字符并将其返回给您。该函数返回一个int,它是相关字符的ASCII码,但如果需要,您可以将结果分配给char变量。 所以通过这种方式,变量c正在获取与EOF进行比较的值。该循环将一直运行,直到文件达到最终。