如下 為什麼C語言讀取檔案中的資料並輸出時有亂碼出現?本來輸入的是數字,然後從檔案中讀取後就變漢字

2021-03-28 02:47:08 字數 4429 閱讀 4773

1樓:匿名使用者

估計是你文字的儲存格式問題。重新另存為一份utf-8格式的檔案。utf-8編碼格式中的數字佔用一個位元組。而ansi或其他字元是佔用兩個位元組的。

c語言檔案輸出時,輸入資料後為什麼會出現亂碼

2樓:吃飽了就撐著

可能是輸入緩衝區之前未清空

使用這個函式將檔案緩衝區清空

memset(buffer,0,sizeof(buffer));

標頭檔案在#include中

3樓:幻夢·人生

你這種寫入方式是直接將這個資料的記憶體原封不動的拷貝到檔案當中。

在c語言中,記憶體中的結構體的儲存並不是所有資料連續的。

你可以在網路上搜尋一下結構體的對齊原則。

這種原則是c語言中,結構體儲存結構的原理。

如果你希望能更好的理解。

4樓:匿名使用者

if(!=1) 簡單看了下,這行有問題,往檔案裡寫的時候是把一個字串寫進去,stud[i]是一個struct,強行把它序列化的話,記憶體中的儲存不是連續的,這樣寫就會寫入一些沒用的資料,導致出錯。考慮一下怎麼把struct序列化,再看看struct的中的位元組是怎麼對齊的,建議而已

5樓:_**加

fwrite函式儲存資料時整型資料將會儲存為對應的ascii字元

比如48就會被儲存為『0』

c語言,資料能寫入檔案,但是從檔案讀取資料的時候,出現了亂碼,如下**,求解答

6樓:濸海月明

在寫檔案部分的for迴圈裡做如下修改:(已編譯執行,成功)

for(i = 0; i < size; i++)

7樓:匿名使用者

逗號被當成name的一部分讀取了……建議還是用空格分開各項輸入吧,不要用逗號了……

c語言中,為什麼呼叫檔案內的資料會出現亂碼

8樓:風雷雪電

先確認一下檔案是二進位制存的嗎?如果是,用記事本開啟它,應該是看不到數字的。不是說在記事本里輸入字元1 2 3 4,然後儲存成number.dat,程式就能正確讀取的。

二進位制讀取的時候fopen要寫成

fp=fopen("number.dat","rb");

rb表示binary:二進位制讀寫。

c語言檔案輸出時,輸入資料後為什麼會出現亂碼

9樓:祈倩語守洛

studenttype),1,fp)!=1)

簡單看了下,bai這行有問題,往檔案du裡寫zhi的時候是把一個dao字串寫進去,專stud[i]是一個struct,強行把它序列化的話,屬記憶體中的儲存不是連續的,這樣寫就會寫入一些沒用的資料,導致出錯。考慮一下怎麼把struct序列化,再看看struct的中的位元組是怎麼對齊的,建議而已

10樓:似曼雁京宣

先確抄認一下檔案是二進位制存的嗎?如果是,用記事本開啟它,應該是看不到數字的。不是說在記事本里輸入字元123

4,然後儲存成number.dat,程式就能正確讀取的。

二進位制讀取的時候fopen要寫成

fp=fopen("number.dat","rb");rb表示binary:二進位制讀寫。

11樓:海理函雨

你這種寫抄入方式是直接將這個資料的記憶體原封不動的拷貝到檔案當中。

在c語言中,記憶體中的結構體的儲存並不是所有資料連續的。

你可以在網路上搜尋一下結構體的對齊原則。

這種原則是c語言中,結構體儲存結構的原理。

如果你希望能更好的理解。

12樓:鎖盼盼賓逸

fwrite函式儲存資料時整型資料將會儲存為對應的ascii字元

比如48就會被儲存為『0』

c語言讀取檔案資料亂碼

13樓:可以叫我表哥

參考**如下:

#include

#include

#include

int main()

return 0;}

14樓:匿名使用者

把開啟方式改為 "r"以及把讀取資訊用fscanf吧,因為如果你是原先先把kk.txt寫好,然後再用你的程式開啟它的話,由於裡面有換行符以及空格等內容,除非開始你是用fwrite函式寫入的結構資訊,否則fread會把這些都作為資訊讀取的(也就是說它讀到一個struct student_type大小的資料就結束,而不管這裡面到底存放的是什麼,這個過程中讀到的可能不是一個完整的結構的資料),所以就會出現你所說的亂碼。

15樓:匿名使用者

給你一個你參考下就行了

#include

using namespace std;

void creat()//建立檔案並且輸入資訊fprintf(fp,"%-10s%-20s%-50s\n","姓名","**號碼","住址");

cout<<"請依次輸入姓名、**號碼、住址(以0結束)\n";

cin>>name;

while(strcmp(name,"0"))fclose(fp);

}void output()//輸出檔案的內容cout<<"\t通訊錄\n";

while(!feof(fp))

fclose(fp);

}int main()

while(!feof(fp))

fclose(fp);

}int main()

c語言讀取檔案出現錯誤,讀取了兩遍而且有亂碼是什麼情況

16樓:自我程式設計

程式執行兩邊,復肯定是**制問題。

資料對計算機bai而言就是2進位制,你看du亂碼說明顯示zhi的時候沒有對應字元dao集,你把原檔案開啟看有亂碼沒。

或者你檔案有中文,你試試用全部英文和數字的檔案讀取。

另外,檔案有格式的話,你換fscanf和fprintf看看。

c語言讀取txt檔案資料時最後有一串亂碼怎麼辦

c語言讀入寫出檔案,寫出檔案時出現個別亂碼。

17樓:匿名使用者

1、c語言標準庫提供了一系列檔案操作函式。檔案操作函式一般以f+單詞的形式來命名(f是file的簡寫),其宣告位於stdio.h標頭檔案當中。

例如:fopen、fclose函式用於檔案開啟與關閉;fscanf、fgets函式用於檔案讀取;fprintf、fputs函式用於檔案寫入;ftell、fseek函式用於檔案操作位置的獲取與設定。

2、例程:

#include

int a;

char b,c[100];

int main()

fscanf(fp1,"%d",&a);//從輸入檔案讀取一個整數b=fgetc(fp1);//從輸入檔案讀取一個字元fgets(c,100,fp1);//從輸入檔案讀取一行字串printf("%ld",ftell(fp1));//輸出fp1指標當前位置相對於檔案首的偏移位元組數

fputs(c,fp2);//向輸出檔案寫入一行字串fputc(b,fp2);//向輸出檔案寫入一個字元fprintf(fp2,"%d",a);//向輸出檔案寫入一個整數fclose(fp1);//關閉輸入檔案

fclose(fp2);//關閉輸出檔案,相當於儲存return 0;}

18樓:金色潛鳥

fread() 和 fwrite() 用於2進位制檔案讀寫。

也就是說,你開啟檔案時,無論讀還是寫 要有選項 b, 例如 "rb","wb".

文字檔案,按2進位制方式開啟,就會按2進位制方法處理。

改正你的 fopen 裡的 選項,就可解決問題。

19樓:

應該是在 fread之後 fwrite之前加上一句話 buffer[isize] = '\0';

出現 屯 的原因,是沒找到結束符.

20樓:匿名使用者

buffer = (char*)malloc(sizeof(char)*( lsize +1)); //修改這一

句zeromemory(buffer ,sizeof(char)*( lsize +1)); //緊隨其後加入這一句

試試看!!

c語言,從檔案中讀取單連結串列並輸出

需求有點不清晰,你要從檔案裡取什麼東西出來?我改了從txt取每一行的字串出來,記錄在你的連結串列,你參考一下 include stdafx.h include stdlib.h intmain phead inti file fp fopen d text.txt rb 一個有內容的txt文字,自己...

c語言,如何在檔案中讀取某些資料,這些資料在一些特定的字

字元擷取函式 函式名 strtok 功 能 查詢由在第二個串中指定的分界符分隔開的單詞 用 法 char strtok char str1,char str2 程式例 include include int main void 函式第一次呼叫需設定兩個引數,strtok str,str需要分割的串 ...

C檔案讀取1 如何讀取文字檔案中的指定字串2 如何讀取文字檔案中指定字串之間的內容

string filecontent system.io.filestream mystream new filestream f test.txt filemode.open system.io.streamreader mystreamreader new streamreader mystre...