C语言文件读写结构体里面的数据怎样存到磁盘文件上
C语言,要将结构体中的数据存到磁盘上需要使用与文件操作相关的库函数。
首先要使用文件打开函数fopen()。
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
其次,使用文件读写函数读取文件。
在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf
最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。
下面使用格式化读写函数fscanf和fprintf实现对文件A.txt(各项信息以空格分割)的读取,并存入结构体数组a中,并将它的信息以新的格式(用制表符分割各项信息)写入B.txt,实现对A.txt的处理。
C语言源程序如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include
#include
#include
typedef struct student{
char name[32];
int no;
char sex[16];
float score;
} stu;
int main(int argc, char* argv[])
{
//打开文件
FILE * r=fopen("A.txt","r");
assert(r!=NULL);
FILE * w=fopen("B.txt","w");
assert(w!=NULL);
//读写文件
stu a[128];
int i=0;
while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF)
{
printf("%s%d%s%g
",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕
fprintf(w,"%s%d%s%g
",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt
i++;
}
//关闭文件
fclose(r);
fclose(w);
system("pause");
return 0;
}
最好用2进制方法打开文件,用fwrite 写文件。读时也用用2进制方法打开文件,用fread读.
这样,写的时候按整个结构写,读也按整个结构读,字符串有空白也没关系。
FILE *fp;
fp=fopen("my.dat","wb");
fwrite(&stu,sizeof(stu),1,fp); // 写1个结构
for (i=0;i<10;i++) fwrite(&student[i],sizeof(student),1,fp); // 写10个结构
fclose(fp);
fp=fopen("my.dat","rb");
fread(&stu,sizeof(stu),1,fp); // 读1个结构
for (i=0;i<10;i++) fread(&student[i],sizeof(student),1,fp); // 读 10个结构
fclose(fp);
1、首先打开VC++6.0。
2、选择文件,新建。
3、选择C++ source file 新建一个空白文档。
4、首先声明头文件,#include<stdio.h>。
5、主函数,定义变量main( ){ FILE *fp; int i; 需要一个结构体,struct rec{ /*定义结构体类型*/ char id[10];。
6、主要代码if( (fp=fopen("d:\\infile.txt","w"))==NULL ) /*以文本只写方式打开文件*/ {
printf("cannot open file"); exit(1); }。
C语言,要将结构体中的数据存到磁盘上需要使用与文件操作相关的库函数。
首先要使用文件打开函数fopen()。
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
其次,使用文件读写函数读取文件。
在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf
最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。
下面使用格式化读写函数fscanf和fprintf实现对文件A.txt(各项信息以空格分割)的读取,并存入结构体数组a中,并将它的信息以新的格式(用制表符分割各项信息)写入B.txt,实现对A.txt的处理。
C语言源程序如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct student{
char name[32];
int no;
char sex[16];
float score;
} stu;
int main(int argc, char* argv[])
{
//打开文件
FILE * r=fopen("A.txt","r");
assert(r!=NULL);
FILE * w=fopen("B.txt","w");
assert(w!=NULL);
//读写文件
stu a[128];
int i=0;
while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF)
{
printf("%s%d%s%g
",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕
fprintf(w,"%s%d%s%g
",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt
i++;
}
//关闭文件
fclose(r);
fclose(w);
system("pause");
return 0;
}
编译运行后的结果如下:
结构体存储到磁盘文件,一般有两种方法,各有优劣,需要依照实际需求来选择。
假定结构体格式为
struct test
{
int a;
float b;
};
1 以二进制方式存储。
直接以二进制方式存储,参考代码如下:
#include <stdio.h>
int main()
{
struct test v = {1, 2.3};
FILE *fp;
fp = fopen("save.bin", "wb"); //存储于save.bin中,注意要以二进制模式打开。
if(fp == NULL)return -1; // 打开文件失败。
fwrite(&v, sizeof(v), 1, fp); //写入文件。
fclose(fp);//关闭文件。
return 0;
}
当需要读取的时候,按照类似的流程,通过fread读取即可。
该操作优势为:
a 代码简单。
b 存储的数据文件大小固定,就是结构体占用内存空间的整数倍。这样在读的时候就可以根据文件的大小直接判断出一共存储了多少个数据。
缺点为:
a 存储的是二进制方式,打开后不可读(大部分时候会是乱码)。
需要注意一点,当结构体中有指针类型时,所有指针不可以直接写入,而是要依照每个指针展开写入,即写入指针指向的地址内容,而不是写入指针本身的值。这种情况下,读取的时候也需要重新分配指针,并读取对应的数据。
2 以文本方式写入。
通过fprintf函数,对每个值以可读的方式,格式化输出到文本文件中。类似于printf的操作,只不过目标由标准输出转向文件。
参考代码如下:
#include <stdio.h>
int main()
{
struct test v = {1, 2.3};
FILE *fp;
fp = fopen("save.txt", "w"); //存储于save.txt中,注意要以文本模式打开,也就是不带b的模式。
if(fp == NULL)return -1; // 打开文件失败。
fprintf(fp, "%d %f", v.a, v.b); //写入文件。
fclose(fp);//关闭文件。
return 0;
}
读取的时候用fscanf依次读取即可。
这种方法的好处是:
a 获得的文件是可读的,打开后可以很清楚的看到每个结构体的值。比如例子中的文件最终存储的是
1 2.300000
缺点为:
a 代码量偏大,如果结构体中有数量较多的元素,那么需要逐个写输出的格式和语句,可见工作量会相当大。
b 存储的文件大小不确定,可能比二进制存储时大,也可能更小,不同结构体数值占用也不同。比如例子中的结构体,二进制存储的时候是8个字节,文本存储的时候是10个字节。而如果赋值v={-1234567,1234.1};那么文件中会存储
-1234567 1234.100000
这样文件就会占用20个字节。
使用文件操作函数
fread
fwrite
数据块读写函数:fread、fwrite。
c语言,怎么从文件读取数据到结构体,求助
#include<stdlib.h> //文件操作格式化读取保存到结构体数组 #defineBUFSIZE1000 structdata { charG[4];floatXs;//起点坐标 floatYs;floatE;};intmain(){ FILE*fp;inti,j,r_n=0;charbuf[BUFSIZE],c;//打开文件 fp=fopen("E:\\line.txt","r");if(...
C语言文件读写结构体里面的数据怎样存到磁盘文件上
1、首先打开VC++6.0。2、选择文件,新建。3、选择C++ source file 新建一个空白文档。4、首先声明头文件,#include<stdio.h>。5、主函数,定义变量main( ){ FILE *fp; int i; 需要一个结构体,struct rec{ \/*定义结构体类型*\/ char id[10];。6、主要代码if( (fp=fopen("d:\\\\in...
C语言文件读写结构体里面的数据怎样存到磁盘文件上
fwrite(&v, sizeof(v), 1, fp); \/\/写入文件。 fclose(fp);\/\/关闭文件。 return 0;}当需要读取的时候,按照类似的流程,通过fread读取即可。该操作优势为:a 代码简单。b 存储的数据文件大小固定,就是结构体占用内存空间的整数倍。这样在读的时候就可以根据文件的大小直接判断出一共存储...
c语言包括什么内容
C语言主要包括数据类型、运算符、控制结构、函数、数组、指针、结构体和联合体,以及文件操作等内容。首先,C语言的数据类型是构建程序的基础。它们定义了可以在程序中使用的各种数据,比如整数、浮点数、字符等。这些数据类型允许程序员以有效的方式存储和操作数据。例如,一个整数类型可以用来存储年龄、数量...
C语言中可否将整个结构体写入文件,然后取出来也是按结构体输出
可以,写的时候用指针一次性写进去,但是如果文件中写如了多个结构体你可能读取的时候要区分一下否则一次全部读出来了,读出来的时候直接赋值就行。
C语言如何从文件中读取定界不定长的数据记录到结构体中?
从你的数据中可以看中,基本上是以"090302" "王三" "男" 542.0 07\/12\/1990 "安徽" "教育" F这样为一节的,这样的一节也正好对应你的一个结构体。所以,一种方式是一次把文件的所有内容读入缓冲区,再进行逐节的解析。另一种方式是一次读一段比一节更长的数据段入缓冲区,一次解析一个结构...
C语言中,如何将文本中的数据读取,并将其赋值给结构体?谢谢
用fread函数将文本中的数据按照结构体定义成员变量的顺序依次读出并赋值给结构体的成员变量即可。比如对于结构体 struct MyStruct { int i;char c;double d;};则这样写:MyStruct s;fread(&(s.i), sizeof(int), 1, fp); \/\/fp为文件指针 fread(&(s.c), sizeof(char), 1, fp);fread...
C语言中,将多个结构体数据写到一个文件中,应该如何读取?
C语言把一个结构体数组写入文件分三步:1、以二进制写方式(wb)打开文件2、调用写入函数fwrite()将结构体数据写入文件3、关闭文件指针相应的,读文件也要与之匹配:1、以二进制读方式(rb)打开文件2、调用读文件函数fread()读取文件中的数据到结构体变量3、关闭文件指针参考代码如下:include<stdio.h>...
c语言怎么将txt文件中的值赋值给结构体中相应的变量?
您好,非常简单,您只要采取流的方式就可以将txt中的文件读出来,然后赋给对应的变量。以后您如果再遇到类似的问题,可以按照下面的思路去解决:1、发现问题:往往生活在世界中,时时刻刻都处在这各种各样的矛盾中,当某些矛盾放映到意识中时,个体才发现他是个问题,并要求设法去解决它。这就是发现问题...
C语言 如何把文件里面的内容存到结构体数组里面
读物文件并写入结构体,同时保存文件的代码如下:1、写 FILE* fp = fopen("card.dat", "wb");for(int i = 0; i < counts; i++){fwrite(&card[i], sizeof(struct card), 1, fp);}fclose(fp);2、读 FILE* fp = fopen("card.dat", "rb");int index = 0;while(!feof(fp))...
吉齐玉屏: C语言把一个结构体数组写入文件分三步:1、以二进制写方式(wb)打开文件2、调用写入函数fwrite()将结构体数据写入文件3、关闭文件指针 相应的,读文件也要与之匹配:1、以二进制读方式(rb)打开文件2、调用读文件函数fread()...
武陵区18571157319: 如何用C语言读取txt文件中的数据到结构体数组中 - ?
吉齐玉屏: 1、在vscode里面添加了Python文件和用于读取的文本文件. 2、然后在txt文件写上一些内容用于待会的内容读取,随便写上即可. 3、此外,我们还必须要导入os文件,这样才可调用os中的一些文件操作方法. 4、然后打开要进行读取内容的文件,并且把读取到的内容数据复制给了变量a. 5、然后把变量a打印即可把内容给展现出来,方便查阅了. 6、接着运行jy.py文件,这样就会开始读取,打印内容. 7、可以看到文件的内容真的被读取到了.
武陵区18571157319: 怎样将文件里的数据读取到相对应的结构数组中 - ?
吉齐玉屏: 使用for循环语句+文件操作函数即可文件中数据读取并存到数组中. 1、C语言标准库提供了一系列文件操作函数.文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中.例如:fopen、fclose函数用于文件打开与关闭
武陵区18571157319: C语言中,用fscanf如何从文件中读取结构体数据 - ?
吉齐玉屏: 用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 小王 ..如此往复...
武陵区18571157319: 怎么把一堆结构体数据读取和写入到文本文件 - ?
吉齐玉屏: 一般有两种方法. 1 以二进制方式打开文件读写 将结构体整体写入或读出 使用fread/fwrite函数. 2 以文本方式读写 将结构体各个元素, 以一定格式,写入到文件,或读出 文件人眼可读. 使用fscanf/fprintf函数.
武陵区18571157319: c语言中怎么把一文件中的内容读到一结构体中 - ?
吉齐玉屏: 如果文件中的数据符合定义的数据结构,就使用读随机文件的办法读 如果不符合,就按各个字段分别读入
武陵区18571157319: C语言中怎么将文件的数据读入到结构体数组中 比如 做一个字典 将中英词写在一个文件里 然后用一个结构体?
吉齐玉屏: 这个就要看你的数据组织了,比如说一个结构体typedef struct { int index; char *word; char *translate;}dictionary;那么你文件里面的也就要按这个顺序排列,然后再用dictionary dc;fscanf(fp,"%d%s%s",&dc.index,dc.word,dc.translate);只要按顺序就能正确读取出来的.
武陵区18571157319: c语言将文本文件读取到结构体中 - ?
吉齐玉屏: 呵呵,满意的话要给我追加分哦!那两个例子都是我自己给你写的. 1. #include"stdio.h" #include"stdlib.h" main() {FILE *fp;char s[100];if((fp=fopen("f:\\score.txt","a"))==NULL){printf("Can't open destination file!\n");exit(0);}...
武陵区18571157319: 在c语言中如何将结构体数据写入文本文件 - ?
吉齐玉屏: struct BOX{char a;int b;int c;};//保存BOX box1 = { 'C', 123, 234 };FILE *f=fopen("d:/a.txt", "w");if (f){fwrite(&box1, sizeof(BOX), 1, f);fclose(f);}//读取BOX box2;FILE *r = fopen("d:/a.txt", "r");if (r){fread(&box2, sizeof(BOX), 1, r);fclose(r);printf("%c %d %d\n", box2.a, box2.b, box2.c);}
武陵区18571157319: C语言文件读写结构体里面的数据怎样存到磁盘文件上 - ?
吉齐玉屏: 1、首先打开VC++6.0. 2、选择文件,新建. 3、选择C++ source file 新建一个空白文档. 4、首先声明头文件,#include<stdio.h>. 5、主函数,定义变量main( ){ FILE *fp; int i; 需要一个结构体,struct rec{ /*定义结构体类型*/ char id[10];. 6、主要代码if( (fp=fopen("d:\\infile.txt","w"))==NULL ) /*以文本只写方式打开文件*/ { printf("cannot open file"); exit(1); }.