如果不关闭文件将会丢失数据。因为,在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出文件。如果当数据未充满缓冲区而程序结束运行,就有可能使缓冲区的数据丢失,要用fclose函数关闭文件,先把缓冲区中的数据输出到磁盘文件,然后才撤销文件信息区。有的编译系统在程序结束前会自动先将缓冲区中的数据写到文件,从而避免了这个问题,但还是应当养成在程序终止前关闭所有文件的习惯。fclose函数也带回一个值,当成功地执行了关闭操作,则返回值0;否则返回EOF(-1);
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i;
int ret_val_fwrite;
float stu[922] = { 8.345,12.78,13.45};
float stu2[922] = { 1 };
FILE *fp;
if ((fp = fopen("E:\\float_save_test.dat", "wb")) == NULL)
{
printf("打开文件失败\n");
exit(0);
}
if ((ret_val_fwrite=fwrite(stu, sizeof(float), 922, fp)) != 922)
{
printf("write file error\n");
}
fclose(fp);//此处如果不调用fclose(fp),关闭文件指针会导致数据丢失,而无法把数据保存到“E:\\float_save_test.dat”中。
//打开float_save_test.dat文件,会发现是空的。
if ((fp = fopen("E:\\float_save_test.dat", "rb")) == NULL)
{
printf("打开文件失败\n");
exit(0);
}
fread(stu2, sizeof(float), 922, fp);
for (i = 0; i < 922; i++)
{
printf("%f\n", stu2[i]);
}
fclose(fp);
return 0;
}