首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体的保存与读取有关问题

2012-03-04 
结构体的保存与读取问题为什么读出来的和保存的总不一样呢?代码:#includestdio.htypedefstruct{charlett

结构体的保存与读取问题
为什么读出来的和保存的总不一样呢?

代码:

#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是保存,其他数字是读取。

[解决办法]
操作结构体的话 最好用二进制方式打开文件
[解决办法]
p=fopen( "code.txt ", "wb ");

...
p=fopen( "code.txt ", "rb ");
[解决办法]
读与写的方式不一样,而且对单纯的数据,而不是普通字符,最好用二进制方式进行操作。也可以把数据先转换成字符,然后用文本的方式操作,但这显然没必要。
[解决办法]
fread()/fwrite()是对二进制文件的操作,但是你打开文件时是以文本格式打开的,肯定不对了。

热点排行