C语言里面赋值语句竟然有返回值

130 阅读1分钟

最近找工作困难,闲着无聊,想去学一学一直想看的C语言。网上查了攻略,入手了一本《C程序设计语言》

做到了习题1-6给我迷惑住了:

验证表达式getchar() != EOF的值是0还是1

参考答案的代码如下:

#include <stdio.h>

/*mac里面输入control+d就是EOF*/

int main()

{

    int c;

    /*这里为什么c = 0的话,循环就终止了呢?*/

    while(c = (getchar() != EOF)) 
        printf("%d\n",c);
    printf("%d - at EOF\n",c);

}

其中,不能令我理解的是while(c=0)就跳出循环了呢,c语言中c=0应该是个赋值语句,又不是条件语句。

我猜测是c语言中的赋值语句会有返回值生成。于是写了下面几行测试代码:

#include <stdio.h>

  


int main()

{

    int c;

    printf("%d\n",c=199); /*果然,当c=0的时候就返回0,c=199就返回199*/

}

所以,while(0)跳出了循环就可以理解了!