程序在EOF上打印垃圾

时间:2019-07-12 17:54:50

标签: c

我正在阅读K&R书,并实现了“复制”示例:

#include <stdio.h>

int main() {
    char c;
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    return 0;
}

所有正常输入似乎正常工作,但是当输入EOF(^ D)时,程序将打印无限的“。”字符,我必须手动停止程序。

我尝试使用putchar(c);printf("%c", c);达到相同的效果。

有人知道原因吗?

2 个答案:

答案 0 :(得分:0)

使用int c代替char c应该可以解决您的问题

答案 1 :(得分:0)

由于c的类型为char,因此从int返回的getchar值将与{{ 1}}。

由于char是带内错误机制,因此它必须是一个可以与可以返回的所有有效字符区分开的错误值。将EOF分配给EOF时,您将丢弃信息。

执行后:

EOF

声明

char

是错误的。

执行以下操作,以保留char c = EOF; 的返回类型:

c == EOF

代替:

getchar