fread写入结构体

摘要:
整数;intmain(){student_typetemp;“wb”);exit(0);fp);fclose(fp),fp=NULL;stud[j]=temp;stud[i].score);}个人;“wb”);fclose(pFile);规模(人));fclose(pFile);对于(inti=0;人[i].height);
#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

免责声明:文章转载自《fread写入结构体》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySql-时间格式转换之转换为时分秒格式的日期C# 定时器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MindManager Pro 9.1.157更改默认字体

新创建图表内默认字体 打开MindManager模型存放目录:C:\Documents and Settings\(用户名)\Local Settings\Application Data\Mindjet\MindManager\9\Library\ENU\Templates\,打开New Blank Map.mmat此文件,在“Central Topi...

文件的上传&amp;amp;预览&amp;amp;下载学习(一)

注:主要是说明后端逻辑和数据库表设计 1.当前主流的几种文件上传&预览&下载方式 把文件直接存储在服务器 分布式存储OSS,比如阿里OSS、Minio 2.数据库表设计 由于文件都是跟业务关联的,比如评论里面掺杂评论图片,常规的设计就是在'评论表'添加上传'图片名称'字段和'图片相对路径',在上传成功后返回给前端 1.1 如果是加入多个...

linux文件名乱码解决办法

1、linux解压压缩文件乱码 unzip -O CP936 xxx.zip 2、一般文件用convmv sudo convmv -f gbk -t utf-8 -r --notest /your_directory 就是将/your_directory目录下原来文件名是gbk编码方式的全部改为utf-8格式的。这里 -f 后面为原来的编码方式,-t 后...

chown命令

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。   1.命令格式:     chown [选项]... [所有者][:[组]] 文件...   2.命...

springboot配置文件详解

https://blog.csdn.net/myvanguard/article/details/84844583 简介 springboot的默认配置文件 application.propertiesapplication.ymlyaml是标记语言,是以数据为中心的的配置文件 server: port:8081 12342.yaml语法1.基本语法k:(...

使用CMake构建OpenCV项目

这篇文章我们来对我们的安装进行测试,并介绍如何用CMake工具快捷地构建OpenCV项目。 为了使整个项目更加条理,我们的文件夹采用如下组织方式: binbuildCMakeLists.txtsrc 其中bin目录用于放编译生成的可执行文件,build目录用于cmake构建项目,src用于放源代码。"CMakeLists.txt"这个名字,一个...