EOF宏如何与getchar一起使用?

问题描述 投票:0回答:1
#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循环?

c eof getchar
1个回答
4
投票

EOF是一个价值,而不是一个功能。它基本上被定义为宏。

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

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

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

从手册页引用(强调我的)

fgetc()getc()getchar()将读取的字符作为无符号的char转换返回到文件或错误结尾的int或EOF。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.