0

以下代码中比较的值是多少?

while ((c = getchar()) != EOF)
        if ( c == '\n')

'\n'由于单引号,我知道这是一个常量变量。我知道它代表ASCII表上字符的数值,对吧?那等于 110。但是什么

((c = getchar()) != EOF)返回?

谢谢

4

3 回答 3

5

关键是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

于 2013-01-09T22:42:55.877 回答
2

在 c 中,赋值操作返回右值,它是等号右侧的值。所以在这种情况下,c=getchar() 返回字符是什么或 EOF。

于 2013-01-09T22:42:09.573 回答
1

你的问题是:

但什么是:((c = getchar()) != EOF)回报?

该表达式((c = getchar()) != EOF)是一个逻辑(或“布尔”)表达式 - 它是“真”或“假”。具体来说,它会测试某些东西是否不等于常数“EOF”。

“某事”是表达式(c = getchar())。这是一项任务;它调用getchar()函数并将返回值分配给变量c。赋值的值就是赋值的值;因此,整个表达式导致以下情况发生:

  1. getchar()叫做
  2. 它的返回值被赋值给c
  3. 然后将该值与常数进行比较EOF
  4. 如果值不等于,EOFwhile语句继续运行。
于 2013-01-09T22:47:48.613 回答