EOF宏如何与getchar一起使用?

时间:2016-01-15 16:59:51

标签: c eof getchar

#include<stdio.h>

int main(void) {
    FILE *fp;
    int ch;
    fp = fopen("input.txt", "w");
    printf("Enter data");
    while ((ch = getchar()) != EOF) {
        putc(ch, fp);
    }
    fclose(fp);
    fp = fopen("input.txt", "w");
    while ((ch = getc(fp)) != EOF) {
        printf("%c", ch);
    }
    fclose(fp);
}

第一个while循环如何停止从用户输入? 由于存在EOF条件。

或者我需要use进行循环吗?

1 个答案:

答案 0 :(得分:4)

EOF是一个值,而不是一个函数。它基本上被定义为宏。

供参考,来自C11,章节§7.21.1,<stdio.h>

  

EOF
  它扩展为整数常量表达式,类型为int,负值为   由几个函数返回以指示文件结束,即不再有来自a的输入   流; [...]

如果getchar()失败,它将返回一个定义为EOF的值。

从手册页引用(强调我的

  

fgetc()getc()getchar()将读取的字符作为无符号字符集转换为int或 EOF文件末尾或错误。

EOF表示可能不适合char类型的值。您必须对int变量使用ch类型。

  

第一个while循环如何停止从用户输入?

在linux上使用 CTRL + D ,在Windows上使用 CTRL + Z