检测文本文件的结尾,使用fgetc读取

时间:2014-05-07 09:30:18

标签: c file eof

我有一个文本文件。我正在编写一个程序,使用 fgetc 从文件中读取并放入二维缓冲区。

打印完文件内容后,尽管已经检查了EOF和ERROR,但它打印了一些垃圾直到缓冲区结束,如下所示。我怎么能完成它?

    unsigned char ch;
    while(ch=fgetc(fp))
    {
       if(ch== EOF || ch==NULL)
       break;
       //OTHER INSTRUCTIONS
    }

谢谢:)

2 个答案:

答案 0 :(得分:2)

EOF是一个值为-1的整数。

当您在while循环中执行ch=fgetc(fp)时,您会读到unsigned char,根据定义,该-1不会被签名,因此它不能等于EOF

解决方案可能是读取整数并在检查int ch; while(ch=fgetc(fp)) { if(ch == EOF) break; //OTHER INSTRUCTIONS } 后进行强制转换。

{{1}}

有关如何实施的示例,请参阅this

答案 1 :(得分:0)

您的程序有一些错误。使用以下程序,打印任何文件的所有数据是正确的程序:

#include<stdio.h>
#include<conio.h>
main()
{
    FILE *fp;
    char c;
    fp=fopen("filename.txt","r");
    clrscr();
    c=fgetc(fp);
    while(c!=EOF)
    {
        printf("%c",c);
        c=fgetc(fp);
    }
    getch();
}

我希望它能帮到你