zoukankan      html  css  js  c++  java
  • fread函数和fwrite函数

    #include<stdio.h>
    typedef struct
    {
    	char name[10];
    	int num;
    	int age;
    }student;
    
    int main()
    {
    	student stuin,stuout;
    	FILE *fp;
    	if((fp=fopen("d:\\dat.txt","w+"))==NULL)
    	{
    		printf("无法打开此文件!\n");
    	}
    	scanf("%s %d %d",stuin.name,&stuin.num,&stuin.age);
    	fwrite(&stuin,sizeof(student),1, fp);
    	fseek(fp,0L,SEEK_END);
    	int len = ftell(fp);
    	rewind(fp);
    	fread(&stuout,len,1,fp);
    	printf("%s %d %d\n",stuout.name,stuout.num,stuout.age);
    	//fprintf(fp,"%s %d %d",stu.name,stu.num,stu.age);
    	fclose(fp);
    }

    对应关系:

    fwrite<<>>fread

    fscanf<<>>fprintf

    fgets<<>>fputs


    1.函数功能


      用来读写一个数据块。


    2.一般调用形式


      fread(buffer,size,count,fp);


      fwrite(buffer,size,count,fp);


    3.说明


      (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。


      (2)size:要读写的字节数;


      (3)count:要进行读写多少个size字节的数据项;


      (4)fp:文件型指针。


     注意:1 完成次写操(fwrite())作后必须关闭流(fclose());


               2 完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;


               3 fprintf() : 按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10字节;str2: 10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。


    文件使用之后一定要关闭,否则将不能正确显示内容.fwrite:读入两个学生信息然后用fwrite存入文件


    fread:用fread从文件中读出学生信息。

    fwrite.c

    #include <stdio.h>
    #define SIZE 2
    struct student_type
    {
     char name[10];
     int num;
     int age;
     char addr[10];
    }stud[SIZE];
    void save()
    {
     FILE *fp;
     int i;
     if((fp=fopen("stu_list","wb"))==NULL)
     {
      printf("cant open the file");
      exit(0);
     }
     for(i=0;i<SIZE;i++)
     {
       if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
        printf("file write error\n");
     }
     fclose(fp);
    }
    main()
    {
     int i;
     for(i=0;i<SIZE;i++)
     {
       scanf("%s%d%d%s",&stud[i].name,&stud[i].num,&stud[i].age,&stud[i].addr);
       save();
     }
     for(i=0;i<SIZE;i++)
     {
       printf("%s,%d,%d",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
     }
    }


     

     

    fread.c

    #include <stdio.h>
    #define SIZE 2
    struct student_type
    {
     char name[10];
     int num;
     int age;
     char addr[10];
    }stud[SIZE];
    void read()
    {
     FILE *fp;
     int i;
     if((fp=fopen("stu_list","rb"))==NULL)
     {
      printf("cant open the file");
      exit(0);
     }
     for(i=0;i<SIZE;i++)
     {
       if(fread(&stud[i],sizeof(struct student_type),1,fp)!=1)
        printf("file write error\n");
     }
     fclose(fp);
    }
    main()
    {
    
     int i;
     read();
     for(i=0;i<SIZE;i++)
     {
       printf("%s,%d,%d,%s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
       printf("\n");
     }
    }


  • 相关阅读:
    EXTJS 4.2 资料 控件之checkboxgroup的用法(静态数据)
    EXTJS 4.2 资料 控件之Window窗体相关属性的用法
    EXTJS 4.2 资料 控件之textfield文本框加事件的用法
    Entity Framework 学习笔记(一)之数据模型 数据库
    EXTJS 4.2 资料 控件之checkboxgroup的用法(动态数据)
    EXTJS 4.2 资料 控件之Grid 列鼠标悬停提示
    Entity Framework 学习笔记(二)之数据模型 Model 使用过程
    EXTJS 4.2 资料 控件之radiogroup 的用法
    EXTJS API
    vue移动端弹框组件,vue-layer-mobile
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835312.html
Copyright © 2011-2022 走看看