当前位置:首页 » 电脑资讯 » 为什么用文件读入到链表中是乱码

为什么用文件读入到链表中是乱码

发布时间: 2022-04-12 07:20:17

❶ 高手请教:链表读入读出文件出现乱码

for(i=0;(p+i)->next!=0;i++)
if(fwrite((p+i),LEN,1,fp)!=1)
printf("file
write
error\n");
fclose(fp);这句有问题
只写入了一次
楼主
你自己改吧
已经把问题给你指出了

❷ C语言用文件输出链表信息出现乱码

在VC里,只有当文件位置指针(fp->_ptr)到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)才会被置为含有_IOEOF。然后再调用feof(),才会得到文件结束的信息。
因此,如果运行如下程序:
char c;
while(!feof(fp))
{
c = fgetc(fp);
printf("%X\n", c);
}
会发现多输出了一个FF,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FF)。
正确的写法应该是:
char c;
c = fgetc(fp);
while(!feof(fp))
{
printf("%X\n", c);
c = fgetc(fp);
}

❸ C语言中file函数链表读取txt文本出现了乱码

提3条修改建议,保证通过。

  1. 删除fflush(stdin);。fflush(stdin)是清除标准输入缓冲区,与文件读入不搭界。

  2. 将fscanf(fp,"%d",&q->num);中的"%d"改为"%d ",d后的空格会吸收掉文件中的广义空格。(前一句可改可不改,因为这一句会自动跳过广义空格)

  3. 将print函数中的printf("%d %d",q->score,q->num);一句改为printf("%d %d ",q->score,q->num);,以使输出第二个整数后回车,让版面标准化。(前面输出字符串时不需要,因为fgets函数会把 读进来放在字符串的最后)

❹ 将链表中数存入文件时在正常记录后面都有一条乱码

while(q->next!=NULL)
{
fprintf(fp,"%s\t\t%s\t\t%s\t",q->id,q->sname,q->sup);
fprintf(fp,"%06.2f %06.2f%6d ",q->price1,q->price2,q->num);
q=q->next; //先输出到文件再指向下一个节点
}

❺ 我建立这个链表后老出现乱码,是什么原因请高手帮我看看,谢谢

fread 和 fwrite是二进制方式读写的,所以存到文件中保存成了二进制文件,用记事本之类的文本查看工具看到的肯定是乱码

如果你希望用记事本之类的文本工具查看保存的结果不是乱码,你就应该在程序中使用文本方式读写,使用fprintf 和 fscanf这两个函数

❻ 有关链表问题:将文件中的数据读入到链表中在打印到屏幕上最后一行总出现乱码求高手!!!!!

楼上的坑爹方法 memset(p, 0, sizeof(advices)); 全置为0没有解决根本问题,把乱码输出成‘\0’结束符,也就是你看不到了,但那一行真实存在,没有解决程序根本错误。
错误在于adread里的判断条件 while(!feof(fp)) 应该为while(q->next!=NULL)
还有main中有个if后加上else改成如下
if((strcmp(p2->adv ,"q"))==0)
{
free(p2);
break;
}
else{
p1->next=p2;
p1=p2;
}
完整程序:

#include<iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;
struct advices
{
char adv[100];

advices *next;
};

advices *adread()
{

advices *p,*q,*head;

FILE *fp;
head=new advices;
if(head==NULL)
{
cout<<"开辟失败!!"<<endl;
exit(1);

}

q=head;
if((fp=fopen("15.txt","rb"))==NULL)
{
cout<<"系统无信息请稍后建立!!!"<<endl;
return head;
}
fread(q,sizeof(advices),1,fp);

while(q->next!=NULL)

{
if((p=(advices *)malloc(sizeof(advices)))==NULL)
{

cout<<"读取失败!!"<<endl;
exit(1);
}

fread(p,sizeof(advices),1,fp);
q->next=p;
q=p;
}
q->next=NULL;
fclose(fp);
return head;

}

int main()
{
FILE *fp;
advices *p;

advices *head,*p1,*p2;
head=new advices;
p1=head;

for(int i=0; ;i++)
{
p2=new advices;

cout<<"请在此写下你的留言以q退出\n====>>>>"<<endl;
cin>>p2->adv;

if((strcmp(p2->adv ,"q"))==0)
{
free(p2);
break;
}
else{
p1->next=p2;
p1=p2;
}
}
p1->next=NULL;

p=head;

if((fp=fopen("15.txt","wb"))==NULL)
{
cout<<"打开失败!!"<<endl;
return 0;
}
while(p)
{
fwrite(p,sizeof(advices),1,fp);

p=p->next;

}
cout<<"信息保存成功!!"<<endl;
fclose(fp);

head=adread();
head=head->next;
while(head)
{

cout<<head->adv<<endl;
head=head->next;
}

return 0;

}

❼ C语言文件与链表结合,用fwrite和fread函数读出的为何是乱码,就是特别多的屯字样。

fwrite()和fread()适合于多个固定大小的“块状”数据的写/读,但对于数组、字符串的读/写显得“笨拙”一些。与fscanf()和fprintf()明显不同的是,前者适合二进制文件做,后者适合文本文件(.txt)操作。如果你用fwrite()读取.txt文件的内容,一般不会得到想要的结果。

❽ 为什么C语言中用链表输出成TXT显示乱码

楼上的说法有问题!
是打开方式不对。
*******************************
r:打开一个文本文件只读
w:打开一个文本文件只写
a:对一个文本文件添加
rb:打开一个二进制文件只读
wb:打开一个二进制文件只写
ab:对一个二进制文件添加
r+:打开一个文本文件读/写
w+:生成一个文本文件读/写
a+:打开一个文本文件读/写
rb+:打开二进制文件读/写
wb+:生成二进制文件读/写
ab+:打开二进制文件读/写
********************************
你这个如果要看到的话就这么写
fp=fopen("职工工资.txt","w");

❾ C语言输入如下链表的时候出现乱码..

scanf("%ld,%f,%s,%c",&p1->code,&p1->mark,&p1->name,&p1->sex);
p1->name已经是地址了,前面不用加&
两处的语句改为scanf("%ld,%f,%s,%c",&p1->code,&p1->mark,p1->name,&p1->sex);试试

热点内容
广东这段时间为什么老是停电 发布:2025-01-10 16:34:47 浏览:783
为什么国产手机没有47寸屏 发布:2025-01-10 16:33:23 浏览:169
为什么喝了苹果醋也打嗝 发布:2025-01-10 16:33:21 浏览:106
侵华日军军服为什么不一样 发布:2025-01-10 16:08:59 浏览:890
为什么女生不愿意和男生来往 发布:2025-01-10 15:48:37 浏览:444
为什么鸡头米有两种颜色 发布:2025-01-10 15:32:25 浏览:300
为什么拼多多里面的手机比较便宜 发布:2025-01-10 15:30:05 浏览:163
为什么恋爱中男生喜欢多想 发布:2025-01-10 15:22:16 浏览:230
晚上为什么有探照灯往天上照 发布:2025-01-10 15:02:10 浏览:390
为什么文件会变成系统 发布:2025-01-10 14:47:35 浏览:608