初識C語言八:結(jié)構(gòu)和文件

結(jié)構(gòu)類型定義的一般形式為:

?????? struct結(jié)構(gòu)名

????? {

?????? 類型名 結(jié)構(gòu)成員名1;

?????? 類型名 結(jié)構(gòu)成員名2;

?????? · · ·

?????? 類型名 結(jié)構(gòu)成員名n;

????? };

關(guān)鍵字struct和它后面的結(jié)構(gòu)名一起組成一個新的數(shù)據(jù)類型名

?結(jié)構(gòu)適合用于描述具有多個屬性的實體或?qū)ο?/p>

在C語言中,使用結(jié)構(gòu)成員操作符“.”來引用結(jié)構(gòu)成員,格式為:

?結(jié)構(gòu)變量名 . 結(jié)構(gòu)成員名

具有相同類型的結(jié)構(gòu)變量可以直接賦值


struct student{????????????????? /* 學(xué)生信息結(jié)構(gòu)定義 */

???int num;?????????????????????? /*學(xué)號 */

???char name[10];???????????????? /*姓名 */

???int computer, english, math;?? /*三門課程成績 */

???double average;??????????????? /*個人平均成績 */

};


指針可以指向任何一種變量,而結(jié)構(gòu)變量也是C語言中的一種合法變量,因此,指針也可以指向結(jié)構(gòu)變量,這就是結(jié)構(gòu)指針。

結(jié)構(gòu)指針就是指向結(jié)構(gòu)類型變量的指針

結(jié)構(gòu)指針的使用:

(1) 用*p訪問結(jié)構(gòu)成員。

(2) 用指向運算符“->”訪問指針指向的結(jié)構(gòu)成員。




文件:操作系統(tǒng)中的文件是指駐留在外部介質(zhì)(如磁盤等)中的一個有序數(shù)據(jù)集。

ASCII碼 (文本文件 textstream)字符流

?二進制碼(二進制文件 binarystream)二進制流,二進制文件是直接把內(nèi)存數(shù)據(jù)以二進制形式保存


文件類型指針:FILE* fp? ? 指向文件緩沖區(qū),通過移動指針實現(xiàn)對文件的操作


打開文件和關(guān)閉文件:fopen("文件名","文件打開方式")

使文件指針與相應(yīng)文件實體對應(yīng)起來

程序?qū)ξ募羔樳M行操作,即fp代表磁盤文件

函數(shù)fopen()的返回值

執(zhí)行成功,則返回包含文件緩沖區(qū)等信息的FILE型地址,賦給文件指針fp

不成功,則返回一個NULL(空值)

exit(0):關(guān)閉所有打開的文件,并終止程序的執(zhí)行

參數(shù)0表示程序正常結(jié)束;非0參數(shù)通常表示不正常的程序結(jié)束


if讀文件

??? 指定的文件必須存在,否則出錯;

if寫文件(指定的文件可以存在,也可以不存在)

??? if? 以"w"方式寫

??????? if該文件已經(jīng)存在,原文件將被刪去重新建立;

??????? else????按指定的名字新建一個文件;

??? else if? 以"a"方式寫

??????? if該文件已經(jīng)存在, 寫入的數(shù)據(jù)將被添加到指定文件原有數(shù)據(jù)的后面,不會刪去原來的內(nèi)容;

??????? else? ?按指定的名字新建一個文件(與“w”相同);

if? 文件同時讀和寫

??????? 使用"r+"、"w+"或 "a+" 打開文件



關(guān)閉文件:if( fclose(fp) ){

??? printf(Can not close the file!\n" );

? exit(0);

}

返回0:正常關(guān)閉文件

返回非0:無法正常關(guān)閉文件



字符讀寫函數(shù): fgetc() / fputc()

字符串讀寫函數(shù):fputs() /fgets()

格式化讀寫函數(shù):fscanf()/ fprintf()

fscanf(文件指針,格式字符串,輸入表);

fprintf(文件指針,格式字符串,輸出表);

二進制讀寫函數(shù):fread()/ fwrite()

fread(buffer,size, count, fp);

從二進制文件中讀入一個數(shù)據(jù)塊到變量

fwrite(buffer,size, count, fp);

向二進制文件中寫入一個數(shù)據(jù)塊?

buffer:指針,表示存放數(shù)據(jù)的首地址;

size:數(shù)據(jù)塊的字節(jié)數(shù)

count:要讀寫的數(shù)據(jù)塊塊數(shù)

¨fp:文件指針

其他相關(guān)函數(shù):

檢測文件結(jié)尾函數(shù)feof()

檢測文件讀寫出錯函數(shù)ferror()

清除末尾標志和出錯標志函數(shù)clearerr()

文件定位的函數(shù)fseek() 、rewind() 、ftell()



函數(shù)feof()

feof(fp);

判斷fp指針是否已經(jīng)到文件末尾,

函數(shù)返回值

1:到文件結(jié)束位置

0:文件未結(jié)束

函數(shù)rewind()

rewind(FILE *fp);

定位文件指針,使文件指針指向讀寫文件的首地址,即打開文件時文件指針所指向的位置

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容