當前位置:首頁 » 電腦資訊 » 為什麼用文件讀入到鏈表中是亂碼

為什麼用文件讀入到鏈表中是亂碼

發布時間: 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 10:57:48 瀏覽:684
修車店換電瓶為什麼便宜 發布:2025-01-10 10:56:02 瀏覽:943
為什麼手機信號上面顯示的兩g怎樣調成4g 發布:2025-01-10 10:51:09 瀏覽:663
為什麼點cad軟體沒反應 發布:2025-01-10 10:50:59 瀏覽:326
油膩的東西為什麼不能多吃 發布:2025-01-10 10:48:57 瀏覽:913
小米手機還有內存為什麼安裝不了 發布:2025-01-10 10:48:03 瀏覽:180
為什麼蘋果13下載不了滴滴出行 發布:2025-01-10 10:47:13 瀏覽:159
為什麼微博沒有微信火 發布:2025-01-10 10:39:06 瀏覽:654
水發魷魚為什麼顏色發黑 發布:2025-01-10 10:38:07 瀏覽:328
為什麼手機cpu都沒有雙線 發布:2025-01-10 10:22:55 瀏覽:912