以下代码中比较的值是什么?
while ((c = getchar()) != EOF)
if ( c == '\n')
我知道'\n'
是一个常量变量,因为单引号。我知道它代表ASCII表上字符的数值,对吗?这等于110.但
((c = getchar()) != EOF)
返回?
由于
答案 0 :(得分:5)
关键点是c
必须是int
:
int c;
while ((c = getchar()) != EOF) { char read_value = c; /* ... */ }
假设int
可以包含比char
更多的值,或者系统的窄多字节编码使用*的至少更多值,并且getchar
返回特殊常量{ {1}}当它无法读取更多数据时。否则,保证您可以将EOF
转换为c
并获取已读取字符的值。
将char
本身声明为c
是一个常见的错误,在这种情况下,循环可能永远不会终止,因为您可能无法捕获特殊值char
,否则会有一个完全有效的字符,与EOF
无法区分。
*)例如,如果(char)EOF
和char
在给定平台上都是32位宽,那么完全没问题,只要说,窄流可以只返回值在[-128,128]范围内的单位,您可以将int
用作-200
。
答案 1 :(得分:2)
在c中,赋值操作返回rvalue,它是等号右侧的值。所以在这种情况下,c = getchar()返回字符或EOF。
答案 2 :(得分:1)
你的问题是:
但是什么是:
((c = getchar()) != EOF)
回复?
表达式((c = getchar()) != EOF)
是一个逻辑(或“布尔”)表达式 - 它是“true”或“false”。具体来说,它测试是否某些东西不等于常数“EOF”。
“某事”是表达式(c = getchar())
。这是一项任务;它调用getchar()
函数并将返回值赋给变量c
。赋值的值是赋值的值;因此,整个表达式会导致以下情况发生:
getchar()
被称为c
EOF
EOF
,则while
语句将继续运行。