题目:验证表达式getchar() != EOF的取值是0还是1
自我解答:
#include <stdio.h>
int main()
{
int c;
c = getchar() != EOF;
printf("the value of 'getchar() != EOF' is %d\n", c);
return 0;
}
当有输入时运行结果为:
the value of 'getchar() != EOF' is 1
当没有输入时运行结果为:
the value of 'getchar() != EOF' is 0
注意!=的优先级高于=,所以 c = getchar() != EOF;相当于 c = (getchar() != EOF),所以c表示的是布尔表达式getchar() != EOF的值,其只能有0或1两个值。所以如果用putchar替代printf的话,其输出的是0或1代表的字符。
参考答案:
#include <stdio.h>
int main()
{
int c;
while(c = getchar() != EOF)
printf("%d\n", c);
printf("%d - at EOF\n", c);
return 0;
}
根据教材第11页的论述,表达式
c = getchar() != EOF 相当于 c = (getchar() != EOF) 本程序从系统的标准输入读取字符并使用了上面的表达式。当有字符可读时,getchar()不会返回文件结束符EOF,所以getchar() != EOF 的取值为真,变量c将被赋值为1.当程序遇到文件结束符时,表达式取值为假,此时,变量c将被赋值为0,程序将结束运行。