当前位置:首页 » 编程语言 » C语言结构体读取文件

C语言结构体读取文件

发布时间: 2023-02-05 09:20:14

c语言对结构体文件的读取

这个结构体
typedef
struct
TEST
{
char*
ch;
char*
cha;
}TESTFEI;
按读取文件要求来说,本身就有问题
char*
ch;
char*
cha;
ch,cha

char
指针
,应该是char数组
还是在读取文件之前分配了空间???
写个例子
typedef
struct
TEST
{
char
ch[20];
char
cha[10];
}TESTFEI;
long
ReadBData(TESTFEI*
Record,
const
char*
szFileName)
{
FILE
*stream;
long
total;
if
(NULL
==
(stream
=
fopen(szFileName,
"rb+")))
{
return
0L;
}
total
=
filelength(fileno(stream))
/
sizeof(TESTFEI);
fseek(stream,
0L,
SEEK_SET);//移动文件指针到开始
fread(Record,
sizeof(TESTFEI),
total,
stream);
fclose(stream);
return
total;
}
函数返回读取的记录数

❷ 用c语言的结构体表示从文件读取的内容

struct student_data {
int student_id;
unsigned char marks[10];
};

size_t read_data( FILE *fp, struct student_data *p )
{
return( fread( p, sizeof( struct student_data ), 1, fp ) );
}

int main( void )
{
FILE *fp;
struct student_data std;
int i;

fp = fopen( "file", "r" );
if( fp != NULL ) {
while( read_data( fp, &std ) != 0 ) {
printf( "id=%d ", std.student_id );

for( i = 0; i < 10; i++ ) {
printf( "%3d ", std.marks[ i ] );
}

printf( "\n" );
}

fclose( fp );

return EXIT_SUCCESS;
}

return EXIT_FAILURE;
}

❸ C语言文件读写结构体里面的数据怎样存到磁盘文件上

1、首先打开VC++6.0。

❹ c语言读取结构体文件并排序

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
structstu
{
intid;
charname[10];
intheight;
intweight;
intscore;
}stu[3];
main()
{
FILE*fp1,*fp2;
inti,j;
structstutemp;
fp1=fopen("f:\stu.dat","r");
if(fp1==NULL)
{
printf("fileerror! ");
exit(0);
}
fp2=fopen("f:\stu2.dat","w");
if(fp2==NULL)
{
printf("fileerror! ");
exit(0);
}
for(i=0;i<3;i++)
{
fscanf(fp1,"%d%s%d%d%d ",&stu[i].id,&stu[i].name,&stu[i].height,&stu[i].weight,&stu[i].score);
}
fclose(fp1);
for(i=0;i<2;i++)
{
for(j=i+1;j<3;j++)
{
if(stu[i].score<stu[j].score)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
for(i=0;i<3;i++)
{
fprintf(fp2,"%d%s%d%d%d",stu[i].id,stu[i].name,stu[i].height,stu[i].weight,stu[i].score);
}
fclose(fp2);
}

❺ C语言将文件读入结构体

void load( STU & head )
{
STU p, r;
FILE * f;
p = head;
f = fopen( "1.txt", "rb" );
//隐患一:fopen一定会成功吗?,如果不成功,则,后面的操作一定会出内存错误
while( !feof(f) )
{
r = (STU)malloc(sizeof(STUS));
fscanf( f, "%s", r->name );
r->next = NULL;
//以下的链表赋值是无效操作,建不成链表表
p = r;
p = p->next;
}
fclose(f);
}

修改后的load函数
void load( STU & head )
{
STU p, r;
FILE * f;
p = head;
f = fopen( "1.txt", "rb" );
if ( !f )
{
printf("open file error\n");
return ;
}
while( !feof(f) )
{
r = (STU)malloc(sizeof(STUS));
fscanf( f, "%s", r->name );
r->next = NULL;
if ( !head ) //如果是第一次,则记录head的位置和当前表尾p
{
head=p=r ;
}
else //否则,将结点r追加到表尾,并将当前结点r作为新的表尾
{
p->next=r;
p=r;
}
}
fclose(f);
}

❻ C语言结构体读取txt文件中内容,有逗号

  1. 用字符读出,判断是否为‘,’,是的话就转化为结构体中的一个变量值,再读取判断,直到都读出来。

  2. 写入文件的时候每个数据的字节数都是定好的,直接读取一行,然后用memcpy(char* des,char* str,int n)读取,memcpy(des,str+n,m);从第n个字节读m个字节。

两种都可以,第二种读字符串的时候有点问题,需要再做处理,因为写入文件时字符串是靠后写的,如%10s,你写入abc,存入文件的是“ abc”,而我们需要的是"abc",前面多了空格,所以你要处理下,要不然比较时字符串是不等的。

❼ C语言文件操作——结构体的读写问题

fread(&a[i],sizeof(BOOK),1,fp);
//这句就把数据读出来了,下面打印就行了printf("%ld
%s
%s
%s
%s
%ld
%.2f\n",a[i].num,a[i].name,a[i].writer,a[i].sort,a[i].publisher,a[i].time,a[i].price);

❽ C语言中,将多个结构体数据写到一个文件中,应该如何读取

C语言把一个结构体数组写入文件分三步:
1、以二进制写方式(wb)打开文件
2、调用写入函数fwrite()将结构体数据写入文件
3、关闭文件指针

相应的,读文件也要与之匹配:
1、以二进制读方式(rb)打开文件
2、调用读文件函数fread()读取文件中的数据到结构体变量
3、关闭文件指针

参考代码如下:

#include<stdio.h>
structstu{
charname[30];
intage;
doublescore;
};
intread_file();
intwrite_file();
intmain()
{
if(write_file()<0)//将结构体数据写入文件
return-1;
read_file();//读文件,并显示数据
return0;
}
intwrite_file()
{
FILE*fp=NULL;
structstustudent={"zhangsan",18,99.5};
fp=fopen("stu.dat","wb");//b表示以二进制方式打开文件
if(fp==NULL)//打开文件失败,返回错误信息
{
printf("openfileforwriteerror ");
return-1;
}
fwrite(&student,sizeof(structstu),1,fp);//向文件中写入数据
fclose(fp);//关闭文件
return0;
}
intread_file()
{
FILE*fp=NULL;
structstustudent;
fp=fopen("stu.dat","rb");//b表示以二进制方式打开文件
if(fp==NULL)//打开文件失败,返回错误信息
{
printf("openfileforreaderror ");
return-1;
}
fread(&student,sizeof(structstu),1,fp);//读文件中数据到结构体
printf("name="%s"age=%dscore=%.2lf ",student.name,student.age,student.score);//显示结构体中的数据
fclose(fp);//关闭文件
return0;
}

❾ 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 <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\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕
fprintf(w,"%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt
i++;
}

//关闭文件
fclose(r);
fclose(w);

system("pause");
return 0;
}

热点内容
jrtplib编译 发布:2024-11-01 18:06:01 浏览:226
java代码中if 发布:2024-11-01 18:02:40 浏览:377
android定时刷新 发布:2024-11-01 17:59:43 浏览:999
炎黄解说我的世界服务器生存 发布:2024-11-01 17:59:42 浏览:542
如何清楚网页缓存 发布:2024-11-01 17:53:58 浏览:552
linux文件权限不够 发布:2024-11-01 17:53:19 浏览:917
c语言中10是什么意思 发布:2024-11-01 17:45:08 浏览:892
装棉衣压缩袋 发布:2024-11-01 17:37:18 浏览:297
android40ble蓝牙 发布:2024-11-01 17:36:58 浏览:712
数据库表对比 发布:2024-11-01 17:18:42 浏览:985