#include <stdio.h>
int main()
{
int c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
return 0;
}
问题是如何区分输入结束和有效数据.这个 解决方案是,当不存在 更多的输入,一个不能与任何实际字符混淆的值. 该值称为EOF,表示``文件结束‘’.我们必须声明c为 一个足够大的类型,可以容纳getchar返回的任何值.我们不能用 字符,因为c必须足够大以容纳EOF 可能是焦炭.因此,我们使用int.
摘自《C编程语言》一书.我有三个问题.
首先,为什么在上述程序运行时同时按ctrl
和4
键会得到输出^\Quit (core dumped)
?我使用的是GNU/Linux机器.
其次,我编写了一个程序,如下所示:
#include <stdio.h>
int main()
{
printf("The part before EOF\n");
putchar(EOF);
printf("The part after EOF\n");
}
然后将其编译为‘eof.out’,并将程序中的int c = getchar();
从书中的int c = getchar();
更改为char c = getchar();
,保存它,然后将程序编译为‘Cop.out’.
当我在终端中运行命令./eof.out | ./copy.out
时,我得到的输出是:
The part before EOF
这意味着程序‘Cop.out’工作正常,因为它没有打印第二个print f,但上面这本书中的段落表明,自从我将int
改为char
之后,应该出现了某种故障,那么发生了什么?
第三,当我将char c = getchar();
改为double c = getchar();
并运行命令./eof.out | ./copy.out
时,我得到的输出是:
The part before EOF
�The part after EOF
为什么putchar(EOF);
不能阻止复制?double
的字节数不是比int
和char
都多吗?这是怎么回事?