我正在阅读K&R书,并实现了“复制”示例:
#include <stdio.h>
int main() {
char c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
所有正常输入似乎正常工作,但是当输入EOF(^ D)时,程序将打印无限的“。”字符,我必须手动停止程序。
我尝试使用putchar(c);
和printf("%c", c);
达到相同的效果。
有人知道原因吗?
答案 0 :(得分:0)
使用int c
代替char c
应该可以解决您的问题
答案 1 :(得分:0)
由于c
的类型为char
,因此从int
返回的getchar
值将与{{ 1}}。
由于char
是带内错误机制,因此它必须是一个可以与可以返回的所有有效字符区分开的错误值。将EOF
分配给EOF
时,您将丢弃信息。
执行后:
EOF
声明
char
是错误的。
执行以下操作,以保留char c = EOF;
的返回类型:
c == EOF
代替:
getchar