以下代码中比较的值是多少?
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) 范围内的单位,并且你可以使用-200as EOF。
在 c 中,赋值操作返回右值,它是等号右侧的值。所以在这种情况下,c=getchar() 返回字符是什么或 EOF。
你的问题是:
但什么是:
((c = getchar()) != EOF)回报?
该表达式((c = getchar()) != EOF)是一个逻辑(或“布尔”)表达式 - 它是“真”或“假”。具体来说,它会测试某些东西是否不等于常数“EOF”。
“某事”是表达式(c = getchar())。这是一项任务;它调用getchar()函数并将返回值分配给变量c。赋值的值就是赋值的值;因此,整个表达式导致以下情况发生:
getchar()叫做cEOFEOF则while语句继续运行。