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