与 feof 的语法比较

标签 c feof

大家好,我正在编写一个 c 程序,我试图一次从一个文本文件中打印两行,问题是当在最后一行时,如果行是奇数,3 行 5 行。它会打印最后一行两次。我找不到针对这个特定问题的 if 函数的比较。是 bool 值吗? 我目前正在尝试 ferror(file)

    FILE *file;

    printf("Hello!\n");
    printf("Please input file name(without.txt):\n");

    scanf("%s", input);
    strcat(input,".txt");
    file = fopen( input , "r" );

    while(!(feof(file)))
    {

        for(i=0; i<2; i++){
        **if(feof(file)==ferror(file))**
        {
            printf("File ended");
                return 0;
        }
        else
        {
            fgets(return_char, 200, file);
            printf("%s\n", return_char);
        }
    }

    }

输入示例:

我有一只猫

我有一只狗

我有一头牛

预期输出:

第一轮

我有一只猫

我有一只狗

第二轮:

我有一头牛

当前输出: 第一轮:

我有一只猫

我有一只狗

第二轮:

我有一头牛

我有一头牛

最佳答案

您观察到的行为是 foef 的典型行为,它会在事后检查文件结尾。

通常最好使用文件读取函数(fgetsfgetcfread 等)的返回值而不是 feof。您的循环将如下所示:

while (1) {
    for(i=0; i<2; i++) {
        if (fgets(return_char, 200, file) == NULL) {
            printf("File ended");
            return 0;
        }            
        printf("%s", return_char);            
    }
    printf("--\n");
}

或者,没有显式循环 i 和外部无限循环框架:

i = 0;
while (fgets(return_char, 200, file)) {
    printf("%s", return_char);            
    if (i == 1) printf("--\n");
    i = 1 - i;
}

printf("File ended");
return 0;

关于与 feof 的语法比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642711/

相关文章:

c - 如何使用feof(FILE *f)?

c++ - C 等价于 C++ STL

c - 使用 fscanf() 从文件中读取文本

c - 为什么“while(!feof(file))”总是错误的?

c - 在 fread/fwrite 循环中出现段错误,复制文件

c - 为什么“while(!feof(file))”总是错误的?

c - C 中的 float

c - 将文本文件读取到某一点并在该点输入数据

c - 如何设置字符串类型的结构成员

c - 处理错误的文件输入名称。当从 argv 中读取名称错误的 i 文件时,程序崩溃。 C语言编程