1.格式化写函数 fprintf
fprintf函数的功能是将数据按指定的格式输出到指定文件中,其调用形式为:
fprintf(文件指针,格式化字符串,输出表列)
其中格式化字符串和输出表列,与标准输出函数printf中要求一致。
例如: fprintf(fp,”stuno is%d,score is%f”,101,89.5);
其意义是把字符串“stuno is 101,score is 89.5”输出到fp指向的文件中。
2.格式化读函数fscanf
fscanf函数的功能是按指定的格式从一个流中执行格式化输入,其调用形式为:
fscanf(文件指针,格式化字符串,输出表列)
其中格式化字符串和输出表列,与标准输出函数?scanf中的要求一致。
fscanf遇到空格和换行时结束.
例如:
int num,age
char name[20]
fscanf(fp,”%d%s%d”,&num,name,&age)
其意义是从文件中一次读取对应格式数据到变量中。
例5
//将一组格式化数据输出到文件result.txt。
/*#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char ch, name[20];
int num;
float score;
if((fp=fopen("c:\\text.txt","w+"))==NULL)
{
printf("cannot open file\n");
getchar();
exit(1);
}
printf("请输入学生的信息,用tab键分隔,输入num为0结束:\n");
printf("学号\t姓名\t成绩\n");
scanf("%d%s%f",&num,&name,&score);
while(num!=0)
{
fprintf(fp,"%d %s %f\n",num,name,score);
scanf("%d%s%f\n",&num,name,&score);
}
printf("文件的内容是:\n");
rewind(fp);
while((ch=fgetc(fp))!=EOF)
{
putchar(ch);
}
printf("\n");
fclose(fp);
}*/
例6
//使用文件格式化读函数fscanf()读取上个程序生成的数据文件并输出。
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char name[20];
int num;
float score;
if((fp=fopen("C:\\text.txt","r"))==NULL)
{
printf("cann't open file!\n");
getchar();
exit(1);
}
while(fscanf(fp,"%d%s%f",&num,name,&score)!=EOF)
printf("%4d%10s%6.2f\n",num,name,score);
fclose(fp);
}
文件的记录读写
文件的记录读写
C语言不但可以以字符、字符串和格式化三种方式进行文件读写,还可以按“记录”(即
数据块) 来读写文件。 这样就可以方便的对数组、 结构体等块类型数据进行整体输入和输出。
在C语言标准库中,使用fwrite函数和fread函数对文件进行按“记录”读写。
读数据块函数调用的一般形式为:fread(buffer,size,count,fp)
写数据块函数调用的一般形式为:fwrite(buffer,size,count,fp)
其中:
buffer是一个指针
在fread函数中它表示存放输入数据的首地址.
在fwrite函数中它表示存放输出数据的首地址
size表示数据块的字节数。count表示要读写的数据块块数。
fp表示文件指针。
例如:
float fa[5]
fread(fa,4,5,fp)
其意义是从fp所指的文件中,每次读4个字节(sizeof(float))送入实数组fa中连续读5次,即读5个实数到fa中。
*/
//【例6】从键盘输入5个数据,写入一个文件中,在读出这5个学生的数据显示在屏幕上
#include<stdio.h>
#include<stdlib.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
};
void main()
{
FILE *fp;
char ch;
int i;
struct stu stusa[2],stusb[2];
if((fp=fopen("c:\\stu_list","wb+"))==NULL)
{
printf("cannot open file!!");
getchar();
exit(1);
}
printf("请输入数据\n");
printf("姓名\t学号\t年龄\t地址\n");
for(i=0;i<2;i++)
scanf("%s%d%d%s",stusa[i].name,&stusa[i].num,&stusa[i].age,stusa[i].addr);
fwrite(stusa,sizeof(struct stu),2,fp);
rewind(fp);
fread(stusb,sizeof(struct stu),2,fp);
printf("\n");
for(i=0;i<2;i++)
printf("%s\t%d\t%d\t%s\n",stusb[i].name,stusb[i].num,stusb[i].age,stusb[i].addr);
fclose(fp);
}