存储在非EOF变量中的值是多少?

MNY*_*MNY 0 c

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

while ((c = getchar()) != EOF)
        if ( c == '\n')
Run Code Online (Sandbox Code Playgroud)

我知道这'\n'是一个常量变量,因为单引号.我知道它代表ASCII表上字符的数值,对吗?这相当于110.但是那是什么

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

谢谢

Ker*_* SB 5

关键点是c必须是int:

int c;

while ((c = getchar()) != EOF) { char read_value = c; /* ... */ }
Run Code Online (Sandbox Code Playgroud)

假设a int可以保存的值多于char系统的窄多字节编码使用*或者至少更多的值,并且当它无法读取更多数据时getchar返回特殊常量EOF.否则,保证您可以转换c为a char并获取已读取的字符的值.

c自身声明为a 是一个常见错误char,在这种情况下,循环可能永远不会终止,因为您可能无法捕获特殊值EOF,否则会出现一个无法区分的完全有效的字符(char)EOF.

*)例如,如果a charinta在给定平台上都是32位宽,那么完全没问题,只要说窄流只能返回值在[-128,128]范围内的单位,并且你可以使用-200as EOF.