怎么读取数据文件中 结构体数据组 个数?

怎么读取数据文件中 结构体数据组 个数?,第1张

首先把目标明确,结构体是表达数据的存放方式,文件也有文件自己的数据格式化存放方式,要从文件读取数据到结构体中,必须要保证这个文件的数据格式化存放方式与内存中的结构体一致,这样才按照你所说的直接读取数据到结构体里面(不知道你是不是要表达这个意思?),其次我们要明确,文件在磁盘上属于外存,你所说的结构体通常是指数据在计算机的内存布局方式,要区分这两种情况。简单来说,你可以先定义一个结构体,然后你想要存的数据直接fwrite到磁盘上,存成二进制文件,然后再从磁盘上fread出来到结构体中(也要以二进制方式来读取,不然会出问题),这样是不是解决了所说的问题?下面是简单的示例代码:#include#includestructdata{intdata_1chardata_2}intmain(intargc,char*argv[]){datatest={4,'A'}datardbuf={0}std::ofstreamoutput_file("test.dat",std::ios_base::out|std::ios_base::binary)if(!output_file.bad()){output_file>rdbuf.data_1>>rdbuf.data_2input_file.close()std::cout<<"rdbuf.data_1="<

用fscanf似乎不是那么简单,不过你要定制数据文件的格式:

比如:

struct stu {

int id

char name[N]

}

你的文件a.dat:

10 //学生总数,读一个后面来循环

1 //fscanf(fp, "%d", &stu[i].id)

小明 //fscanf(fp, "%s", &stu[i].name)

2

小王

..如此往复读取。

------------

如果是二进制文件,可以用fread读定长数据,直接存到结构体中

int fread( void *buffer, size_t size, size_t num, FILE *stream )

//buffer结构体指针,

//size结构体长度

//num一般指定为1

//stream文件流

C语言中对结构体数据格式文件进行读取时,必须以二进制格式打开文件,然后按结构体类型变量内存块方式进行数据读取,相关读数据命令为fread()。

函数说明:

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

从stream文件流中,读取nmemb个size大小的数据块到ptr所指的内存buf中,返回读取到的有效数据块数。

如,有如下结构体定义:

typedef struct TEST

{

int num

double score

}STRTEST

STRTEST data 

FILE *fp = fopen("file.dat", "rb" )  //按二进制格式打开文件

int n=fread( &data, sizeof(STRTEST), 1, fp ) //读取一个数据块到变量data中。

注意,当结构体中定义的变量有指针类型时,在存储数据时,就不能按结构体进行存储了。

因为,指针变量中存储的是内存地址,而程序在不同环境运行时,所使用的内存地址是不同的,只存储内存地址,不能把真正的数据保存下来,所以,即使是正确读取到文件内容,也不能得到当时的结构体内存数据。因而,在存储结构体数据时,要根据结构体类型变量特点采用正确的方法进行存储,才能正确的读取。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8103628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存