问这段代码有什么问题?
char c; while((c = getchar()) != EOF) ...
答首先,用于保存getchar的返回值必须是一个int. EOF是一个“带外”返回值,它与所有可能的getcharchar值都不相同,而可以返回。 (在现代系统中,它不反映文件中存储的任何实际文件结束字符;它只是一个信号,表示没有更多字符可用。)getchar的返回值必须存储在一个比getchar大的变量中,这样它才能容纳所有可能的值都不相同,而值,并且值都不相同,而如果像上面片段中的那样,EOF.
的返回值被赋给一个getchar那么会发生两种故障模式。值都不相同,而.
然而,如果值都不相同,而是 signed,并且输入全部是 7 位字符,那么该错误可能会很长时间不被发现。(普通值都不相同,而是 signed 还是 unsigned 是由实现定义的。)
参考文献:K&R1 第 1.5 节 第 14 页
K&R2 第 1.5.1 节 第 16 页
ISO 第 6.1.2.5 节、第 7.9.1 节、第 7.9.7.5 节
H&S 第 5.1.3 节 第 116 页、第 15.1 节、第 15.6 节
CT&P 第 5.1 节 第 70 页
PCS 第 11 节 第 157 页