结构体的保存与读取问题
为什么读出来的和保存的总不一样呢?
代码:
#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()是对二进制文件的操作,但是你打开文件时是以文本格式打开的,肯定不对了。