结构体 与fprintf()写入文件内容 fscanf读出文件内容

将商品信息写入文件 读出文件内容并显示

#include <stdio.h>
#include <stdlib.h>
void WriteFile(FILE *p,int n);
void ReadFile(FILE *p);
typedef struct Rec
{char id[10];
 char name[20];
 float price;
 int count;
       }Rec;
int main(int argc, char *argv[])
{
  FILE *fp;
  //一个文件指针 
  char inputfile[20];
  //一个字符串数组 
  printf("请输入打开的文件名字\n");
  scanf("%s",inputfile);
  //写入字符串 
  fp=fopen(inputfile,"w+");
  //打开一个文件,返回值给fp(我想这个返回值是一个地址) 
  WriteFile(fp,2);
  ReadFile(fp);
  fclose(fp);
  system("PAUSE");	
  return 0;
}
void WriteFile(FILE *p,int n)
{Rec record;
 printf("输入商品数据:\n");
 for(int i=0;i<n;i++)
 {printf("输入序号:\n"); 
         scanf("%s",record.id);
         //输入的字符串地址给了record.id 
  printf("输入名字:\n");
         scanf("%s",record.name); 
  printf("输入单价:\n");
         scanf("%f",&record.price);//这里&是赋值
  printf("输入个数:\n");
         scanf("%d",&record.count);//这里&是赋值
  fprintf(p,"%s %s %f %d\n",record.id,record.name,record.price,record.count);}
  
}
void ReadFile(FILE *p)
{rewind(p);
 Rec record;
 double total=0;
 while(fscanf(p,"%s %s %f %d\n",record.id,record.name,&record.price,&record.count)!=EOF)
{ printf("商品编号:%s\n商品名字:%s\n商品单价:%f\n商品个数:%d\n",record.id,record.name,record.price,record.count);
  total+=total+record.count*record.price;}
 
 printf("商品总价:%f",total); 
} 

在这里插入图片描述在读取大量文件时候:
使用二进制文件的数据块读写函数 fread() fwrite()
相应的文件打开方式
fp=fopen(inputfile,"wb+");

fwrite(&record,sizeof(record),1,p); 
fread(&record,sizeof(record),1,p)//若读写文件结束返回0 否则返回1
#include <stdio.h>
#include <stdlib.h>
void WriteFile(FILE *p,int n);
void ReadFile(FILE *p);
typedef struct Rec
{char id[10];
 char name[20];
 float price;
 int count;
       }Rec;
int main(int argc, char *argv[])
{
  FILE *fp;
  //一个文件指针 
  char inputfile[20];
  //一个字符串数组 
  printf("请输入打开的文件名字\n");
  scanf("%s",inputfile);
  //写入字符串 
  fp=fopen(inputfile,"wb+");
  //打开一个文件,返回值给fp(我想这个返回值是一个地址) 
  WriteFile(fp,2);
  ReadFile(fp);
  fclose(fp);
  system("PAUSE");	
  return 0;
}
void WriteFile(FILE *p,int n)
{Rec record;
 printf("输入商品数据:\n");
 for(int i=0;i<n;i++)
 {printf("输入序号:\n"); 
         scanf("%s",record.id);
         //输入的字符串地址给了record.id 
  printf("输入名字:\n");
         scanf("%s",record.name); 
  printf("输入单价:\n");
         scanf("%f",&record.price);//这里&是赋值
  printf("输入个数:\n");
         scanf("%d",&record.count);//这里&是赋值
  fwrite(&record,sizeof(record),1,p);}
  
}
void ReadFile(FILE *p)
{rewind(p);
 Rec record;
 double total=0;
 while(fread(&record,sizeof(record),1,p))
{ printf("商品编号:%s\n商品名字:%s\n商品单价:%f\n商品个数:%d\n",record.id,record.name,record.price,record.count);
  total=total+record.count*record.price;}
 
 printf("商品总价:%f",total); 
} 
  • 3
    点赞
  • 1
    评论
  • 14
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值