C语言实现链表,为什么我把链表写入文件,文件里面显示的是乱码。下面是我的代码,请好心人帮我提下。 10

typedefstructNode//定义单链表结点类型{intelement;//数据域Node*next;//指针域}List;//创建线性表,并读取数据,遇到“*”... typedef struct Node //定义单链表结点类型
{
int element;//数据域
Node *next;//指针域
}List;
//创建线性表,并读取数据,遇到“*”结束
Node *creatList(List *pHead)
{
int ch;
List *head;
List *p1,*p2;
head=(List *)malloc(sizeof(List)); //申请新节点
head->next=NULL;
p1=head; //用指针p1指向头节点
ch=getchar();
while(ch!='*') //输入的值若等于*就不执行
{
int x;
scanf("&d",&x);
p2=(List *)malloc(sizeof(List));
p2->element=x;
p2->next=NULL;
p1->next=p2;
p1=p1->next;
ch=getchar();

}
printf("链表创建成功\n");
return head;
}
//写入文件-存盘
void Save(List* head)
{
FILE *fp;
int i;
if((fp=fopen("F:\\lin.txt","w"))==NULL)
{
printf("can not open file\n");
exit(0);
}
while (head)
{
if (fwrite(&head->element,sizeof(struct Node),1,fp)!=1)
{
printf("file write error\n");
}
head=head->next;
}
fclose(fp);
}
//遍历链表,输出链表的内容*/
void printList(List *pNode)
{
List *head; //定义一个链表头指针
head=pNode;
if(head=NULL) //链表为空
{
printf("链表为空\n");
}
else
{
while(head!=NULL)
{
printf("%d ",pNode->element);
head=head->next;
}
printf("\n");
}
}
void main()
{
List *list;
int loc;
initList(list);//初始化链表
list=creatList(list);//创建链表
Save(list);//存盘

printList(list);//遍历

}
展开
 我来答
wqws16623
2012-10-28 · TA获得超过140个赞
知道答主
回答量:53
采纳率:0%
帮助的人:37.7万
展开全部
你的程序并没有写错。数据已经写入的文件,你下次也可以从文件里读入并还原这个链表。
这只是一个字符的显示问题,你将一个int数据写入数据,显然占据四个字节,而当你用记事本打开时它就会根据你当前采用的字符集解释这四个字节的含义,然后再显示出来。但由于你存入的是整型数据而不是某个字符集的字符,所以解释出来的在很大可能上就会是乱码。
这就是所谓的二进制文件和字符文件的区别。
如果你将一个整数,如432转换成三个字符'4' '3' '2'然后存入文件,当你用记事本打开这个文件时就会看到你想要的432而不是一堆乱码。
追问
那要怎么写入txt文件里面是显示数字的
追答
要用文本形式打开文件即"wt+"

int num=100;
FILE * file=fopen("text.txt","wt+");
fprintf(file,"%d",num);//格式化写入
fscanf(file,"%d",&num);//格式化读出
fclose(file);
xey_csu
2012-10-27
知道答主
回答量:21
采纳率:0%
帮助的人:22.1万
展开全部
if((fp=fopen("F:\\lin.txt","w"))==NULL) 把“w”改为“r+”
追问

还是一样,全是乱码

追答
我没看清楚,你用的是fwrite,这个是以二进制的形写入,所以用“w”是错的。建议把fwrite改为fprintf;同时用“r+”,

fprintf(fp," 内容 ",参数);你自己看一下书吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式