fprintf和fscanf是一对,他们是以字符形式往内存中写,也就是说无论你往文件里写什么,它通通都把它转成字符再写入;
fwrite和fread是一对,他们是以二进制形式往里写,也就是说写的值原本值是什么,就写什么。
所以用的时候要注意,不能交叉使用。
例如 fprintf写如整数1,内存形式为:0x31,即字符1的 acsii码49;
fwrite写入整数1,内存形式为:0x01 00 00 00,即1。
测试一:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct user
{
int id;
char name[10];
int yi;
int er;
int san;
double ave;
};
int main() {
int id;
char name[10];
int yi;
int er;
int san;
double ave;
int int1[10];
double double1[10];
FILE *file;
if((file=fopen("E:\\a.txt","rw+"))==NULL)
{
printf("open file error!\n");
system("pause");
return 0;
}
int1[0]=1;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
strcpy(name,"huang");
fwrite(name,sizeof(char),10,file);
//fprintf(file,"%s",name);
int1[0]=1;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
int1[0]=2;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
int1[0]=3;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
double1[0]=1.0;
fwrite(double1,sizeof(double),1,file);
//fprintf(file,"%f",double1[0]);
memset(int1,0,sizeof(int)*10);
fread(&int1[0],sizeof(int),1,file);
fread(name,sizeof(char),10,file);
fread(&int1[1],sizeof(int),1,file);
fread(&int1[2],sizeof(int),1,file);
fread(&int1[3],sizeof(int),1,file);
fread(&ave,sizeof(double),1,file);
// fscanf(file,"%d%s%d%d%d%f",&int1[0],name,&int1[1],&int1[2],&int1[3],&ave);
printf("%d\n",int1[0]);
printf("%s\n",name);
printf("%d\n",int1[1]);
printf("%d\n",int1[2]);
printf("%d\n",int1[3]);
printf("%f\n",ave);
fclose(file);
system("pause");
return 0 ;
}
测试二:
在指定位置写入
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
struct user
{
int id;
char name[10];
int yi;
int er;
int san;
double ave;
};
int main() {
int unit;
int id;
char name[10];
int yi;
int er;
int san;
double ave;
int int1[10];
double double1[10];
FILE *file;
if((file=fopen("E:\\a.txt","r+b"))==NULL)
{
printf("open file error!\n");
system("pause");
return 0;
}
rewind(file);
int1[0]=1;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
strcpy(name,"huang");
fwrite(name,sizeof(char),10,file);
//fprintf(file,"%s",name);
int1[0]=1;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
int1[0]=2;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
int1[0]=3;
fwrite(int1,sizeof(int),1,file);
//fprintf(file,"%d",int1[0]);
double1[0]=1.0;
fwrite(double1,sizeof(double),1,file);
//fprintf(file,"%f",double1[0]);
memset(int1,0,sizeof(int)*10);
rewind(file);
fread(&int1[0],sizeof(int),1,file);
fread(name,sizeof(char),10,file);
fread(&int1[1],sizeof(int),1,file);
fread(&int1[2],sizeof(int),1,file);
fread(&int1[3],sizeof(int),1,file);
int pos = ftell(file);
printf("pos is: %d\n",pos);
fread(&ave,sizeof(double),1,file);
printf("%d\n",int1[0]);
printf("%s\n",name);
printf("%d\n",int1[1]);
printf("%d\n",int1[2]);
printf("%d\n",int1[3]);
printf("%f\n",ave);
ave=(int1[0]+int1[1]+int1[2]+int1[3])/3.0;
unit=sizeof(int)*4+sizeof(char)*10;
fseek(file,unit,SEEK_SET);
pos=ftell(file);
printf("set pos is: %d\n",pos);
double1[0]=ave;
fwrite(double1,sizeof(double),1,file);
fflush(file);
// fscanf(file,"%d%s%d%d%d%f",&int1[0],name,&int1[1],&int1[2],&int1[3],&ave);
rewind(file);
fread(&int1[0],sizeof(int),1,file);
fread(name,sizeof(char),10,file);
fread(&int1[1],sizeof(int),1,file);
fread(&int1[2],sizeof(int),1,file);
fread(&int1[3],sizeof(int),1,file);
fread(&ave,sizeof(double),1,file);
printf("%d\n",int1[0]);
printf("%s\n",name);
printf("%d\n",int1[1]);
printf("%d\n",int1[2]);
printf("%d\n",int1[3]);
printf("%f\n",ave);
fclose(file);
system("pause");
return 0 ;
}