编译器如何处理`(c = getchar())!= EOF`?

时间:2013-05-07 10:02:53

标签: c if-statement

假设这个while循环:

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

正如您所看到的,我们要将作业与EOF进行比较,它是如何发生的?据我所知,赋值不会返回任何值,因此您无法比较赋值(对吗?)

2 个答案:

答案 0 :(得分:3)

分配的表达式返回赋值,在while ((c = getchar()) != EOF)的情况下,您正在比较标准输入中的下一个字符({{ 1}}使用getchar()返回 - 这是指定的值

答案 1 :(得分:0)

每当我们调用getchar()时,它会读取输入的下一个字符并将其返回给您。该函数返回一个int,它是相关字符的ASCII代码,但如果需要,可以将结果赋值给char变量。 因此,通过这种方式,变量c得到的值最终与EOF相比。这个循环将一直运行,直到文件到达它的结束。