我有一个文本文件。我正在编写一个程序,使用 fgetc 从文件中读取并放入二维缓冲区。
打印完文件内容后,尽管已经检查了EOF和ERROR,但它打印了一些垃圾直到缓冲区结束,如下所示。我怎么能完成它?
unsigned char ch;
while(ch=fgetc(fp))
{
if(ch== EOF || ch==NULL)
break;
//OTHER INSTRUCTIONS
}
谢谢:)
答案 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();
}
我希望它能帮到你