EOF之前达成...... EOF

时间:2017-05-22 09:54:02

标签: c eof dev-c++

我正在做一个非常简单的作业,要求我输出文件的内容,但我在做任何事情之前意外地达到了EOF。 该文件只包含单词“pig”,由于某种原因,EOF返回16.我正在使用Dev-Cpp,程序在C中。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    fp=fopen("C:/Users/myusername/Desktop/numeri.txt", "r");
    char c;
    if (fp!=NULL)
    {
        printf ("File opened correctly.\n");
        c=fgetc(fp);
        printf("%d\n", feof(fp)); //FEOF EQUALS 16 FOR SOME REASON
        while (feof(fp)==0)
        {
            putchar(c);
            c=fgetc(fp);
        }
        fclose(fp);
        system("PAUSE");
        return 0;
    }
    else
    {
        printf ("File cannot be opened.\n");
        system("PAUSE");
        exit(1);
    }
    system("PAUSE");
}

1 个答案:

答案 0 :(得分:0)

根据feof()

的手册页

函数feof()测试文件结束指示符
    对于流指向的流,     如果设置则返回非零值。

所以唯一的期望是返回值为0或非零。

因此值16

没有任何问题

这是代码的建议版本:

  1. 它干净地编译
  2. 它执行所需的功能
  3. 它实现了对问题的评论
  4. 通过单个空白行分隔代码块(for,if,while,do ... while,switch,case,default),增强了可读性和理解力。
  5. 现在是代码

    #include <stdio.h>   // fopen(), printf(), perror(). fclose(), fgetc()
    #include <stdlib.h>  // exit(), EXIT_FAILURE
    
    int main( void )
    {
        FILE *fp = fopen("big.txt", "r");
    
        if (fp!=NULL)
        {
            printf ("File opened correctly.\n");
    
            int c=fgetc(fp);
    
            while (EOF != c)
            {
                putchar(c);
                c=fgetc(fp);
            }
    
            fclose(fp);
            return 0;
        }
    
        else
        {
            perror ("File cannot be opened.\n");
            exit( EXIT_FAILURE );
        }
    }
    

    注意:文件big.txt只包含big

    这是结果输出:

    File opened correctly.
    big