用c语言编写的程序保存到记事本的内容怎么是这样?

int addcard()//增加读者卡
{
FILE *fp;
fp=fopen("card.txt","a+");
int i;
for(i=0;fread(&cards[i],sizeof(struct card),1,fp)!=0;i++)
;
printf("请输入新增的卡号:\n");
scanf("%d",&cards[i].cardnum);
printf("请输入新增的读者姓名:\n");
scanf("%s",&cards[i].readername);
printf("请输入新增的读者班级:\n");
scanf("%d",&cards[i].stuclass);
printf("请输入默认的初始借阅图书序号为0。\n");
scanf("%d",&cards[i].booknum);
printf("请输入默认的初始借书日期为0。\n");
scanf("%d",&cards[i].lenddate);
fwrite(&cards[i],sizeof(struct card),1,fp);
fclose(fp);
printf("请按任意键返回。\n");
getch();
return TURE;
}
在运行时输入卡号:231 姓名tui 班级2 序号 0 班级0
记事本的内容为 N tui 
为什么会这样?怎么改?

你使用fwrite函数保存了结构到一个文件,而结构保存时不是文本格式,是二进制格式,所以用记事本看就会出现乱码,记事本只能用来看文本文件。

两种方法解决这个问题。
1.程序不变,用ultraedit或editplus软件以十六进制方式查看。
2.修改程序,不用fwrite函数直接保存结构,可以用fprintf函数以文本方式保存结构中的数据。如
fprintf( fp, "%s %s %s\n", cards[i].cardnum,cards[i].readername,cards[i].stuclass);
温馨提示:答案为网友推荐,仅供参考
相似回答