zoukankan      html  css  js  c++  java
  • fread写入结构体

    #include<stdio.h>
    #include <stdlib.h>
    #define N 4
    typedef struct student_type
    {
    	char name[10];
    	int num;
    	int score;
    }student_type;
    int main()
    {
    	student_type temp;
    	student_type stud[4] = {{"merry",1,77},{"white",2,100},{"sam",3,88},{"jack",4,99}};
    	int i,j;
    	FILE *fp;
    	fp = fopen("stu_list.txt","wb");
    	if(fp==NULL)
    	{
    		printf("cannot open file.\n");
    		exit(0);
    	}
    	fwrite(&stud,sizeof(student_type),4,fp);
    	fclose(fp);
    	fp = NULL;
    
    	fp = fopen("stu_list.txt","rb");
    	fseek(fp,0L,SEEK_SET);
    	fread(&stud,sizeof(student_type),4,fp);
    	fclose(fp);
    	fp = NULL;
    	for(i=0;i<N;i++)
    	{
    		for(j=0;j<N-i-1;j++)
    		{
    			if(stud[j].score<stud[j+1].score)
    			{
    				temp = stud[j+1];
    				stud[j+1] = stud[j];
    				stud[j] = temp;
    			}
    		}
    	}
    	for(i=0;i<N;i++)
    		printf("%s\t%d\t%d\n",stud[i].name,stud[i].num,stud[i].score);
    
    }


    #include <stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    typedef struct Person{
    	char name[10];
    	float height;
    	float weight;
    }Person;
    
    int main()
    {
    	Person persons[3] = {{"sam",1.78,73.6},{"jack",1.65,49},{"mary",1.67,80}};
    	FILE *pFile = NULL;
    	pFile = fopen("d.dat","wb");
    	if (NULL != pFile)
    	{
    		fwrite(&persons,sizeof(Person),3,pFile);
    		fclose(pFile);
    		pFile = NULL;
    	}
    	else
    	{
    		printf("写文件失败!");
    		return 0;
    	}
    	pFile = fopen("d.dat","rb");
    	if (NULL != pFile)
    	{
    		memset(persons,0,sizeof(persons));
    		fseek(pFile,0L,SEEK_SET);
    		fread(&persons,sizeof(Person),3,pFile);
    		fclose(pFile);
    		pFile = NULL;
    		for(int i=0;i<=2;i++)
    		{
    			printf("姓名是%s\n",persons[i].name);
    			printf("身高是%f\n",persons[i].height);
    			printf("体重是%f\n\n",persons[i].weight);	
    		}
    	}
    	return 0;
    }


    int fseek( FILE *stream, long offset, int origin );
      第一个参数stream为文件指针
      第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
      第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
      SEEK_SET: 文件开头
      SEEK_CUR: 当前位置
      SEEK_END: 文件结尾
      其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
      简言之:
      fseek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
      fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
      fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。
    exit()和return的区别:
      按照ANSI C,在最初调用的main()中使用return和exit()的效果相同。
      但要注意这里所说的是“最初调用”。如果main()在一个递归程序中,exit()仍然会终止程序;但return将
      控制权移交给递归的前一级,直到最初的那一级,此时return才会终止程序。return和exit()的另一个区别
      在于,即使在除main()之外的函数中调用exit(),它也将终止程序。
    size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
      注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
      返回值:返回实际写入的数据块数目
      (1)buffer:是一个指针,对fwrite来说,是要输出数据的地址;
      (2)size:要写入内容的单字节数;
      (3)count:要进行写入size字节的数据项的个数;
      (4)stream:目标文件指针;
      (5)返回实际写入的数据项个数count。
      说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大,而且是fseek函数对此函数没有作用。
    函数原型:
      size_t fread(void *buffer, size_t size, size_t count, FILE *stream); 
      功 能:
      从一个文件流中读数据,读取count个元素,每个元素size字节.如果调用成功返回count.如果调用成功则实际读取size*count字节
      参 数:
      buffer
      用于接收数据的内存地址,大小至少是 size*count 字节.
      size
      单个元素的大小,单位是字节
      count
      元素的个数,每个元素是size字节.
      stream
      输入流
      返回值:
      实际读取的元素数.如果返回值与count(不是count*size)不相同,则可能文件结尾或发生错误.
      从ferror和feof获取错误信息或检测是否到达文件结尾.
    http://blog.csdn.net/dongguxidu1/article/category/1243474

  • 相关阅读:
    git 删除远程文件、文件夹
    pod install太慢 可以使用代理的方式
    flutter Container()最小宽度 最小高度
    flutter common init 常用Widget初始化
    xcode 嵌入flutter_module后编译报错 This app could not be installed at this time.
    Spring AOP
    Spring @Value 配置项解析 vs Spring @ConfigurationProperties 配置项解析
    Spring Bean 的实例化过程
    SpringBoot 配置项解析
    Spring IOC 自动注入流程
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835284.html
Copyright © 2011-2022 走看看