标题:结构体数据怎么放到文件里
只看楼主
gospark
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-6-1
 问题点数:0 回复次数:12 
结构体数据怎么放到文件里

结构体数据怎么放到文件里?从文件中又怎么读出结构体数据?
比如下面程序: 建立结构体数组school[10],怎么存到文件里,又怎么读出?

#include"stdio.h"
#include"stdlib.h"
main()
{ int i;
FILE*fp;
struct school //定义结构体
{ int num;
int item;
int order;
int score;
}
school[10];
//写入文件
if((fp=fopen("d:\\test\\gxp.txt","w"))==NULL)
{ printf("can not open file");
exit(0);
}


for(i=0;i<2;i++)
{ printf("请输入学校编号\n");
scanf("%d",&school[i].num);
printf("请输入项目编号\n");
scanf("%d",&school[i].item);
printf("请输入名次\n");
scanf("%d",&school[i].order);
printf("请输入分数\n");
scanf("%d",&school[i].score);
fprintf(fp,"%d%d%d%d",&school[i].num,&school[i].item,&school[i].order,&school[i].score);
};
fclose(fp);// 关闭文件

//读文件
if((fp=fopen("d:\\test\\gxp.txt","r"))==NULL)
{ printf("can not open file");
exit(0);
}

for(i=0;i<2;i++)
fscanf(fp,"%d%d%d%d\n",&school[i].num,&school[i].item,&school[i].order,&school[i].score);

for(i=0;i<2;i++)
printf("%d %d %d %d\n",school[i].num,school[i].item,school[i].order,school[i].score);
fclose(fp);// 关闭文件

}

搜索更多相关主题的帖子: 结构体数据 文件 exit school 
2007-07-12 02:46
gospark
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-6-1
得分:0 

文件这一章老师没讲,我们课本上写的太笼统,比较难以理解,大家能不能推荐本书?


软硬结合才是发展之路~~~
2007-07-12 02:48
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
得分:0 
fprintf(fp,"%d%d%d%d",&school[i].num,&school[i].item,&school[i].order,&school[i].score);
不用加地址符的吧?
2007-07-12 08:44
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
得分:0 
以下是引用『点点滴滴』在2007-7-12 8:44:40的发言:
fprintf(fp,"%d%d%d%d",&school[i].num,&school[i].item,&school[i].order,&school[i].score);
不用加地址符的吧?

不用这么复杂
直接把结构体放进去就行了
fwrite(&school[i],sizeof(struct school),1,fp)


编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-12 09:18
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
得分:0 
以下是引用酒肉弥勒佛在2007-7-12 9:18:25的发言:

不用这么复杂
直接把结构体放进去就行了
fwrite(&school[i],sizeof(struct school),1,fp)

哦,谢谢指教~
2007-07-12 09:39
gospark
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-6-1
得分:0 

各位大侠,多谢!确实是这样正确,不过还有一个难题。
写入文件后,再执行此程序,得到正确结果。
但是把 “写入文件”这段程序去掉,执行此程序得到的全是-858993460,这个是怎么回事,不是已经写入文件了吗?怎么不能得到正确结果?


软硬结合才是发展之路~~~
2007-07-12 10:45
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
得分:0 
贴源码看看

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-12 13:04
gospark
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-6-1
得分:0 

#include"stdio.h"
#include"stdlib.h"
main()
{ int i;
FILE*fp;
struct school
{ int num;
int item;
int order;
int score;
}
school[10];
if((fp=fopen("d:\\test\\gxp.txt","w"))==NULL)
{ printf("can not open file");
exit(0);
}


for(i=0;i<2;i++)
{ printf("请输入学校编号\n");
scanf("%d",&school[i].num);
printf("请输入项目编号\n");
scanf("%d",&school[i].item);
printf("请输入名次\n");
scanf("%d",&school[i].order);
printf("请输入分数\n");
scanf("%d",&school[i].score);
fprintf(fp,"%d%d%d%d",&school[i].num,&school[i].item,&school[i].order,&school[i].score);
};
fclose(fp);// 关闭文件

if((fp=fopen("d:\\test\\gxp.txt","r"))==NULL)
{ printf("can not open file");
exit(0);
}

for(i=0;i<2;i++)
fwrite(&school[i],sizeof(struct school),1,fp);

for(i=0;i<2;i++)
printf("%d %d %d %d\n",school[i].num,school[i].item,school[i].order,school[i].score);
fclose(fp);// 关闭文件

}


软硬结合才是发展之路~~~
2007-07-12 13:17
gospark
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-6-1
得分:0 

请版主帮个忙啊 有什么错误?


软硬结合才是发展之路~~~
2007-07-12 14:55
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
得分:0 
用 fwrite写要用fread读

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-12 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-154783-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.474558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved