【发布时间】:2011-12-11 12:39:56
【问题描述】:
引自 Kernighan 和 Ritchie 的“C 编程语言”第 16 页 -
#include<stdio.h>
main()
{
int c;
c = getchar();
while(c!=EOF)
{
putchar(c);
c = getchar();
}
getchar();
return 0;
}
"
char类型专门用于存储此类字符 数据,但可以使用任何整数类型。我们使用int表示微妙但 重要原因。问题是区分输入的结尾 从有效数据。解决方案是getchar返回一个独特的 没有更多输入时的值,不能混淆的值 任何真实的角色。该值称为EOF,表示“结束 文件”。我们必须声明c是一个足够大的类型来保存任何值getchar返回。我们不能使用char,因为c必须很大 除了任何可能的char之外,足以容纳EOF。因此我们 使用int。”。
我查了一下stdio.h,上面写着#define EOF (-1)
这本书最后指出char 不能使用,而这个程序“工作得很好”(见编辑)c 也是char 数据类型。到底是怎么回事?任何人都可以用位和有符号值来解释吗?
编辑:
正如 Oli 在答案中提到的,程序无法区分 EOF 和 255。所以它不会正常工作。我想知道发生了什么 - 你是说当我们进行比较 c!=EOF 时,EOF 值被强制转换为 char 值 = 255(二进制的 11111111;即用 2 的补码写入时 EOF 的位 0 到 7符号)?
【问题讨论】:
-
定义“工作得很好”。您尝试过哪些输入?
-
@CharlesBailey - 我知道该程序无法正常使用 255 输入,正如 Oli 在下面的答案中提到的那样。我正在尝试探索这里发生的事情。相应地编辑问题。
标签: c