C文件之三 文件的读写

                         文件的格式化读写

     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);
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值