结构体的保存与读取问题

mayudong1 2007-07-17 12:45:55
为什么读出来的和保存的总不一样呢?

代码:

#include <stdio.h>

typedef struct
{
char letter;
int weight;
int lchild;
int rchild;
int parent;
}HUFMTREE;


void main()
{
void init(HUFMTREE tree[]);
void save(HUFMTREE tree[]);
void opentree(HUFMTREE tree[]);
HUFMTREE tree[100];
int i;
scanf("%d",&i);
if(i==1)
{
init(tree);
save(tree);
}
else
{
opentree(tree);
}
}
void init(HUFMTREE tree[])
{
int i;
for(i=0;i<100;i++)
{
tree[i].lchild=0;
tree[i].rchild=0;
tree[i].parent=0;
tree[i].letter=0;
tree[i].weight=i;
}
}
void save(HUFMTREE tree[])
{
FILE *p;
p=fopen("code.txt","w");
fwrite(tree,sizeof(HUFMTREE),100,p);
fclose(p);
}
void opentree(HUFMTREE tree[])
{
FILE *p;
int i;
p=fopen("code.txt","r");
fread(tree,sizeof(HUFMTREE),100,p);
fclose(p);
for(i=0;i<100;i++)
{
printf("%d ",tree[i].weight);
}
getch();
}

运行后输入1是保存,其他数字是读取。
...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiantongyuan 2007-07-17
  • 打赏
  • 举报
回复
fread()/fwrite()是对二进制文件的操作,但是你打开文件时是以文本格式打开的,肯定不对了。
mayudong1 2007-07-17
  • 打赏
  • 举报
回复
明白了,谢谢各位了
Inhibitory 2007-07-17
  • 打赏
  • 举报
回复
读与写的方式不一样,而且对单纯的数据,而不是普通字符,最好用二进制方式进行操作。也可以把数据先转换成字符,然后用文本的方式操作,但这显然没必要。
jixingzhong 2007-07-17
  • 打赏
  • 举报
回复
fread 和 fwrite 如果不是 二进制方式操作文件,
读写文件的字节数会不正确,
导致读写结果出错。
jixingzhong 2007-07-17
  • 打赏
  • 举报
回复
p=fopen("code.txt","wb");

...
p=fopen("code.txt","rb");
gclu212 2007-07-17
  • 打赏
  • 举报
回复
操作结构体的话 最好用二进制方式打开文件

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧