相关疑难解决方法(0)

与EOF比较时,使用int作为字符类型

引用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数据类型.到底是怎么回事?任何人都可以用位和有符号值来解释?

编辑:
正如奥利在答案中提到的,该程序无法区分EOF255.所以它不会很好.我想知道发生了什么 - 你是说当我们进行比较c!= EOF时,EOF值被转换为char值= 255(二进制的11111111;即用2的补码写的EOF的0到7位符号)?

c

4
推荐指数
2
解决办法
1940
查看次数

标签 统计

c ×1