如手机网站源码,营销软文是什么,iis应用程序池与网站,慈溪seo大家好啊#xff0c;我们今天来补充文件操作的读取结束的判定。 被错误使用的feof
牢记#xff1a;在文件读取过程中#xff0c;不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候#xff0c;判断是读取失败结束#xff0c;还是遇到文件尾… 大家好啊我们今天来补充文件操作的读取结束的判定。 被错误使用的feof
牢记在文件读取过程中不能用feof函数的返回值直接用来判断文件的是否结束而是应用于当文件读取结束的时候判断是读取失败结束还是遇到文件尾结束。 文本文件读取是否结束判断返回值是否为 EOF fgetc 或者 NULL fgets 例如 fgetc 判断是否为 EOF . fgets 判断返回值是否为 NULL .二进制文件的读取结束判断判断返回值是否小于实际要读的个数。 例如 fread判断返回值是否小于实际要读的个数。 【看到代码】
#include stdio.h
#include stdlib.h
int main(void)
{
int c; // 注意int非char要求处理EOF
FILE* fp fopen(test.txt, r);
if(!fp) {
perror(File opening failed);
return EXIT_FAILURE;
}
//fgetc 当读取失败的时候或者遇到文件结束的时候都会返回EOF
while ((c fgetc(fp)) ! EOF) // 标准C I/O读取文件循环
{
putchar(c);
}
//判断是什么原因结束的
if (ferror(fp))
puts(I/O error when reading);
else if (feof(fp))
puts(End of file reached successfully);
fclose(fp);
}还有一个就是文件缓冲区 ANSIC 标准采用“缓冲文件系统”处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。 那么我们怎么来判断文件缓冲区呢
#include stdio.h
#include windows.h
//VS2013 WIN10环境测试
int main()
{
FILE*pf fopen(test.txt, w);
fputs(abcdef, pf);//先将代码放在输出缓冲区
printf(睡眠10秒-已经写数据了打开test.txt文件发现文件没有内容\n);
Sleep(10000);
printf(刷新缓冲区\n);
fflush(pf);//刷新缓冲区时才将输出缓冲区的数据写到文件磁盘
//注fflush 在高版本的VS上不能使用了
printf(再睡眠10秒-此时再次打开test.txt文件文件有内容了\n);
Sleep(10000);
fclose(pf);
//注fclose在关闭文件的时候也会刷新缓冲区
pf NULL;
return 0;
}这里我们以写的方式打开一个文件在其中写入abcdef睡眠十秒当我们发现文件里并没有内容这个时候我们刷新缓冲区睡眠十秒这个时候我们的才将缓冲区上的内容写到文件里我们再打开文件就可以看到我们文件上的内容了。
相信大家一定明白了原理那么我们的分享就到这里了谢谢大家。