引用Kernighan和Ritchie的"C编程语言"第16页 -
#include<stdio.h>
main()
{
int c;
c = getchar();
while(c!=EOF)
{
putchar(c);
c = getchar();
}
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
"该类型char专门用于存储此类字符数据,但可以使用任何整数类型.我们使用int了一个微妙但重要的原因.问题是区分输入的结尾和有效数据.解决方案是getchar返回一个独特的值当没有更多的输入时,一个不能与任何真实字符混淆的值.这个值被称为EOF"文件结束".我们必须声明c一个足够大的类型来保存任何getchar返回的值.我们不能char因为使用c必须足够大EOF,除了任何可能之外char.因此我们使用int."
它说,我在stdio.h中查了一下 #define EOF (-1)
这本书最后说明char不能使用,而这个程序"工作正常"(参见编辑)也c作为char数据类型.到底是怎么回事?任何人都可以用位和有符号值来解释?
编辑:
正如奥利在答案中提到的,该程序无法区分EOF和255.所以它不会很好.我想知道发生了什么 - 你是说当我们进行比较c!= EOF时,EOF值被转换为char值= 255(二进制的11111111;即用2的补码写的EOF的0到7位符号)?
c ×1