#include <stdio.h>
/* copy input to output; 2nd version*/
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
这非常令人困惑......因为你永远不会逃脱while循环。我已经知道EOF是-1。我键入-1但它只是重新打印它。这是一个永无止境的循环。随着时间的推移,图书馆会发生变化,并且与图书的预期不同?当我说库我的意思是库中的putchar()/ getchar()...抱歉。
答案 0 :(得分:11)
EOF(文件结尾)的工作原理是什么?
EOF只是一个指定负值的宏。它不必是-1。您可以使用控制字符从命令行发出文件结束信号,通常是Windows系统的ctrl + z或POSIX系统的ctrl + d的组合。
当你写'-1'时,你不会写VALUE -1,而是写字符串{' - ','1'}
看看here。
答案 1 :(得分:2)
EOF
不是字符
这很重要。记住它。
当你试图获得角色时,可能会发生一些事情。通常是有效地阅读一个角色:你的程序接收该角色并继续前进......
int ch = getchar();
但是,会发生什么是磁盘崩溃?或者就在那个时候有一个坏的部门?还是网络崩溃了?或者没有更多数据?
那么,必须有一种方法可以将这些条件与普通字符区分开来。 C
选择的方式是返回一个值从不可以解释为真实字符的值。该值为EOF
,这是一个负值(即使您的实现使用unsigned char
signed char
),也会返回所有真实字符,其值转换为char
。这就是为什么非常重要为字符使用int
(而不是预期的char
)。
所以EOF
意味着无法读取角色。您可以尝试找出原因(网络故障?坏扇区?文件末尾?...)或者只是假设它是文件结尾并从那里开始。
所以,在
while ((c = getchar()) != EOF)
有两件事:作业和比较
c = getchar()
如果出现错误,会在c中为真实字符设置0或更高的值;如果出现错误,则为EOF
,因此
while ((c = getchar()) != EOF)
表示“将字符转换为变量c
”
要记住的重要事项:
EOF
不是字符。使用int
定义字符。
答案 2 :(得分:0)
输入文字后,按Enter键输入新行。然后按住Ctrl并按下字母D.
我正在写同一本书。我认为你应该能够按Ctrl + D退出,但我必须先按Enter键(我认为我的shell有问题)。
顺便说一句,这是在章节文本中。