【发布时间】:2014-08-14 10:05:11
【问题描述】:
#include<stdio.h>
int main()
{
int c;
while((c=getchar())!=EOF)
putchar(c);
putchar(c); //2nd putchar
getch();
}
在“Ritchie n Kernighan 的 C”一书中的上述代码中,声明 c 和 int 变量的原因如下:
这样
c可以保存EOF的代码,该代码在char数据类型可以容纳的字符代码之外。
但是当我将 c 声明为 char 并输入 EOF(CTRL-Z + Enter) 时,该值(在我的计算机上为 -1)确实进入 c,我立即退出 while up ,就像我将 c 声明为 int 时那样。
为什么我们需要将 c 声明为 int,而 char 工作得很好?还是我在这里遗漏了什么?
还有一件事,在第二个putchar 语句中,它应该在收到EOF 之后打印c 的最后一个值(即-1),但它没有。为什么?
【问题讨论】:
-
让任何说荷兰语的人无法接触到您的程序。其中 ij 有向字母是一个普通字母,通常使用字符代码 255。没什么大问题,我们只有 2500 万。
-
在最后一段中解决您的问题:在
putchar打印一个值之前,它会将其转换为unsigned char。所以,假设EOF是-1(它不是必须的,但最常见的是),转换为(8 位)unsigned char产生0xFF,根据您的编码,可能是什么是否为有效字符(例如,在 UTF-8 中,此字节不能以任何有效序列出现)。所以也许你只是没有看到它,虽然它是输出的。通过hexdump管道输出或将其写入文件。 -
这是一个启示! @HansPassant
标签: c getchar kernighan-and-ritchie