c 學生成績的二進位制的寫入和讀取出現問題還有要計算班級平均成績怎么算

2022-10-04 13:50:30 字數 5434 閱讀 3795

1樓:紫薇命

你應該讀取乙個位元組賦值給無符號char a,然後讀取第二個位元組賦值給無符號char b,然後根據你的資料是大端儲存還是小端儲存,進行移位a或b進行拼湊並轉型出乙個short:僅供參考,按大端儲存做的: int a = 1; unsigned char ac = a; int b = 136; unsigned char bc = b; short ab = (((short)ac) << 8) + ((short)bc);

c語言學生成績管理系統

c語言二進位制檔案的讀取問題

2樓:金魚

c語言中二進位制檔案的讀取要用fread和fwrite來實現。

fwrite()與fprintf()是不同的。

fwrite將寫入的資料作為檔案的磁碟內容儲存。fprintf將寫入的資料的每個字元所對應的ascii碼作為檔案的磁碟內容儲存。fprintf做了乙個轉換的工作。

當開啟檔案時,記事本會自動把檔案的磁碟內容作為ascii碼轉換成對應的字元,然後再顯示出來,即顯示的是文字內容而不是磁碟內容。

例如,用fwrite向檔案寫入「65」時,檔案的磁碟內容就是儲存的65(磁碟上以二進位制表示)。當用記事本開啟檔案時,記事本會讀到65,並把65看作乙個ascii碼,再把對應的字元「a」顯示出來。因此螢幕上看到的文字內容是「a」。

而用fprintf向檔案寫入「65」時,檔案的磁碟內容儲存的是「6」和「5」這兩個字元對應的ascii碼,分別是54和53。因此檔案的磁碟內容是54和53。當用記事本開啟檔案時,記事本讀到54,就顯示出對應的「6」。

再讀到53,就顯示出對應的「5」。

3樓:匿名使用者

由於資料結構是

資料長度(要求必須為int)+資料內容 (可以為char) 以二進位制資料流的形式儲存到各自的檔案中

那麼可以考慮以fread讀取長度 然後再通過fread讀出資料段例如

4樓:瀚漠

這個很正常,這是作業系統的快取(cache)在起作用。

快取:為了解決cpu速度和記憶體速度的速度差異而產生(cpu運算速度比記憶體快的多)

當程式需要讀取某個檔案時,實際就是把資料讀入記憶體由cpu運算,cpu首先去快取中找尋,查詢不到就會到記憶體中去讀取同時複製到快取中以便下次訪問,這個時候速度自然很慢,當你第二次讀取該檔案時,快取中已經存在,cpu再次訪問這些資料就會變的非常快。

這是和系統讀取資料的方式有關的,並不是因為某個函式效率低的原因,比較明顯的:

你在某個磁碟下搜尋某乙個檔名,第一次會比較慢,第二次就會快很多,原因就是第二次cpu需要處理的資料已經存在快取中,處理時效率會非常高。

用c語言 設計一學生成績管理系統,要求: 1. 學生成績的資訊包括:學號、姓名、性別、年齡、系別、班級、

5樓:群星驊墜

#include

#include

#include

#define maxlen 100

#define null 0

typedef struct node list;

list *creat()

return (head);

}void find (list *h)

else

printf("目標沒找到\n");

}list *del (list *h)

if(p)

else

printf("沒有此學生的記錄,無法刪除!\n");

return (h);

}list *insert(list *h)// 將新結點插入表尾

r->next=q;

r=r->next;

return (head);

}void output(list *h)}void main()

}// while}

c++編寫程式,從鍵盤輸入5個學生的資訊,包括姓名,學號,3門課程的成績,計算三門課的平均成績,以二進位制形式 25

6樓:

可以用電子**來製作做好後把它儲存到某個資料夾裡然後再把它複製或剪下到磁碟檔案stud中

c語言程式設計檔案開啟關閉

7樓:__帥__帥

#include

#include

void main()

fclose(fp1); /* 關閉檔案fp1 */fclose(fp2); /* 關閉檔案fp2 */}

有關c語言 二進位制檔案寫入和讀取

8樓:

不知道你的fwrite和fread中間有什麼**,fwrite後,檔案指標指向末尾,這時讀是讀不到東西的,必須使用fseek將指標移到最前面或是關閉檔案後再重新開啟。

9樓:匿名使用者

試試

10樓:匿名使用者

是不是沒用fseek函式, 或者重新開啟

c語言中採用二進位制檔案儲存資料的問題

11樓:投機士

在磁碟的儲存上都是二進位制儲存這點上都一樣。

從檔案編碼的方式來看,檔案可分為ascii碼檔案和二進位制碼檔案兩種。

ascii檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應乙個位元組,用於存放對應的ascii碼。例如,數5678的儲存形式為:

asc碼:  00110101 00110110 00110111 00111000

↓     ↓    ↓    ↓

十進位制碼: 5     6    7    8 共佔用4個位元組。ascii碼檔案可在螢幕上按字元顯示, 例如源程式檔案就是ascii檔案,用dos命令type可顯示檔案的內容。

由於是按字元顯示,因此能讀懂檔案內容。

二進位制檔案是按二進位制的編碼方式來存放檔案的。 例如, 數5678的儲存形式為: 00010110 00101110只佔2個位元組。

二進位制檔案雖然也可在螢幕上顯示, 但其內容無法讀懂。

流可以分為兩種型別:文字流和二進位製流。文字流是解釋性的,最長可達255個字元,其中回車/換行將被轉換為換行符「/n」,(如果以"文字"方式開啟乙個檔案,那麼在讀字元的時候,系統會把所有的"/r/n"序列轉成"/n",在寫入時把"/n"轉成"/r/n" archim 's opinion )。

二進位製流是非解釋性的,一次處理乙個字元,並且不轉換字元。

通常,文字流用來讀寫標準的文字檔案,或者將字元輸出到螢幕或印表機,或者接受鍵盤的輸入;而二進位製流用來讀寫二進位制檔案(例如圖形或字處理文件),或者讀取滑鼠輸入,或者讀寫數據機。

如果用文字方式開啟檔案,會把「0d 0a」自動變換成「/n」來存在記憶體中。寫入的時候反向處理。 而二進位制方式開啟的話,就不會有這個過程。

所以從上面可以看出:文字檔案佔磁碟空間大,讀取速度比較慢,但開啟後容易理解;二進位制檔案佔磁碟空間小,讀取速度快,如果要理解檔案檔案的意思需要自己進行解釋。

12樓:匿名使用者

比如要儲存乙個整數int a=12345;到檔案可以是文字方式,可以是二進位制方式。

文字方式就是儲存的檔案內容是乙個字串12345,記事本可以直接開啟,顯示12345

fprintf(fp, "%d", a);

二進位制方式就是把直接把12345這個數在記憶體的內容(0x00003039)直接放在檔案中,你用記事本開啟是亂碼,一般用16進製制編輯器開啟

fwrite(&a, sizeof(a), 1, fp);

一般都是直接把乙個結構儲存到檔案

比如struct stu

students;

13樓:匿名使用者

1、二進位制文字使用fopen函式的二進位制模式「rb」就可以開啟。對於程式來說,不管字尾名如何,檔案分為兩種型別:文字檔案和二進位制檔案。

c語言裡有一系列檔案操作函式。區分文字和二進位制檔案,需要在開啟檔案時設定不同的控制符mode的變數即可。

2、fopen的函式原型:file * fopen(const char * path,const char * mode);

fopen函式的第乙個引數是檔案路徑,第二個引數是開啟方式,有以下幾種方式:

r 以唯讀方式開啟檔案,該檔案必須存在。

r+ 以可讀寫方式開啟檔案,該檔案必須存在。

rb+ 讀寫開啟乙個二進位制檔案,允許讀資料。

rw+ 讀寫開啟乙個文字檔案,允許讀和寫。

w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案。

w+ 開啟可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。

a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。(eof符保留)

a+ 以附加方式開啟可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留。 (原來的eof符不保留)

wb 只寫開啟或新建乙個二進位制檔案;只允許寫資料。

wb+ 讀寫開啟或建立乙個二進位制檔案,允許讀和寫。

wt+ 讀寫開啟或著建立乙個文字檔案;允許讀寫。

at+ 讀寫開啟乙個文字檔案,允許讀或在文字末追加資料。

ab+ 讀寫開啟乙個二進位制檔案,允許讀或在檔案末追加資料。

上述的形態字串都可以再加乙個b字元,如rb、w+b或ab+等組合,加入b 字元用來告訴函式庫開啟的檔案為二進位制檔案,而非純文字檔案。

3、例程:

#include

#include

int main ()

while ((iread = fread (szbuf, 1, sizeof (szbuf), fpphoto)) > 0)

fwrite (szbuf, 1, iread, fptarget) ;

while ((iread = fread (szbuf, 1, sizeof (szbuf), fptext)) > 0)

fwrite (szbuf, 1, iread, fptarget) ;

fclose (fpphoto) ;

fclose (fptext) ;

fclose (fptarget) ;

return 0 ;}

14樓:

檔案本質上都是用二進位制存貯的,我不明白你說的「一般儲存方式」是啥。

採用二進位制儲存,最關鍵的是你如何設計你儲存的資料結構。

C二進位制如何轉成Byte和符串,C二進位制如何轉成Byte和字串

f5其實就是byte的16進製制表現形式 byte bts new byte 1 你除錯的時候你就會看到bts 0 裡面的值就是245 int i int bts 0 i的值為245string str1 bts 0 tostring str1有可能是亂碼 string str2 bts 0 tos...

二進位制加法,二進位制的加減法

二進位制的運算算術運算二進位制的加法運算法則 0 0 0,0 1 1 1 0 1,1 1 10 向高位進製 二進位制的運算算術運算二進位制的加法 0 0 0,0 1 1 1 0 1,1 1 10 向高位進製 即7 111,10 1010,3 11 先把兩個數對其核實進製計算時候第一部一樣從最右邊對齊...

二進位製數對應的十進位製數是多少,二進位製數1010101對應的十進位製數是多少

寫出二進位制每位上的基數就可以計算了 二進位制基數寫法 個位1,小數點左邊 高位 低位 2,小數點右邊 后位 前位 2 按順序寫出1010.101b對應各位 8 4 2 1.1 2 1 4 1 8 將要轉換的數按位對齊寫在下面一行 1 0 1 0.1 0 1 觀察這個數 這個數包含1個8,1個2,1...