第九章預(yù)處理命令、位運(yùn)算和文件_第1頁(yè)
第九章預(yù)處理命令、位運(yùn)算和文件_第2頁(yè)
第九章預(yù)處理命令、位運(yùn)算和文件_第3頁(yè)
第九章預(yù)處理命令、位運(yùn)算和文件_第4頁(yè)
第九章預(yù)處理命令、位運(yùn)算和文件_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、9.1 預(yù)處理命令預(yù)處理命令u作用:作用:對(duì)源程序編譯之前(預(yù)編譯)做一些處理對(duì)源程序編譯之前(預(yù)編譯)做一些處理,生成擴(kuò)展生成擴(kuò)展C源程序源程序。u種類(lèi)種類(lèi)宏定義宏定義 #define文件包含文件包含 #include條件編譯條件編譯 #if-#else-#endif等等9.1 預(yù)處理命令預(yù)處理命令u格式:格式:“#”開(kāi)頭開(kāi)頭占單獨(dú)書(shū)寫(xiě)行占單獨(dú)書(shū)寫(xiě)行預(yù)處理命令預(yù)處理命令不是不是C C語(yǔ)句,語(yǔ)句尾不加分號(hào)語(yǔ)句,語(yǔ)句尾不加分號(hào)9.1.1 宏定義宏定義u不帶參數(shù)宏定義不帶參數(shù)宏定義一般形式:一般形式: #define #define 標(biāo)識(shí)符標(biāo)識(shí)符 字符串字符串功能功能: :用指定標(biāo)識(shí)符用指定標(biāo)識(shí)符

2、( (宏名宏名) )代替字符序列代替字符序列( (宏體宏體) )定義位置定義位置:任意任意(一般在函數(shù)外面一般在函數(shù)外面)作用域作用域:從定義命令到文件結(jié)束從定義命令到文件結(jié)束一般用大寫(xiě)字母如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);u#undef可可終止宏名作用域終止宏名作用域格式:格式: #undef 宏名宏名例 #define YES 1 main() . #undef YES #define YES 0 max() . YES原作用域原作用域YES新作用域新作用域

3、9.1.1 宏定義宏定義如如 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”);展開(kāi)后:展開(kāi)后: if(x=1) printf(“correct!n”); else if (x=0) printf(“error!n”);u 宏展開(kāi):預(yù)編譯時(shí)宏展開(kāi):預(yù)編譯時(shí),用宏體替換宏名用宏體替換宏名-不作不作語(yǔ)法檢查語(yǔ)法檢查u 宏定義可嵌套,不能遞歸宏定義可嵌套,不能遞歸例例 #define MAX MAX+10 ( )u 宏定義中使用必要的括號(hào)宏定義中使用必要的括號(hào)()()例例 #define WIDTH 80 #define

4、LENGTH (WIDTH+40) var=LENGTH*2;宏展開(kāi):宏展開(kāi):var= (80+40)*2 ;例例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展開(kāi):宏展開(kāi):var= 80+40 *2;9.1.1 宏定義宏定義u 帶參數(shù)宏定義帶參數(shù)宏定義一般形式:一般形式: #define 宏名宏名(參數(shù)表參數(shù)表) 字符串字符串v宏展開(kāi):宏展開(kāi):形參用實(shí)參換,其它字符保留形參用實(shí)參換,其它字符保留v宏體及各形參外一般應(yīng)加括號(hào)()宏體及各形參外一般應(yīng)加括號(hào)()例例 #define S(a,b) a*b . area=S(3,2);

5、宏展開(kāi):宏展開(kāi): area=3*2;不能加空格不能加空格9.1.1 宏定義宏定義例例 #define S (r) PI*r*r相當(dāng)于定義了不帶參宏相當(dāng)于定義了不帶參宏S,代表字符串代表字符串“(r) PI*r*r” 例例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y);宏展開(kāi):宏展開(kāi):z=x+y*x+y;一般寫(xiě)成:一般寫(xiě)成: #define POWER(x) (x)*(x)宏展開(kāi):宏展開(kāi): z=(x+y)*(x+y);9.1.1 宏定義宏定義 下面程序的運(yùn)行結(jié)果是:下面程序的運(yùn)行結(jié)果是:#define DOUBLE( r) r*rmain() int x

6、=1,y=2,t; t=DOUBLE(x+y); printf(%dn,t);5 以下程序的運(yùn)行結(jié)果是:以下程序的運(yùn)行結(jié)果是: #define POWER(x) ((x)*(x)) main() int i=1; while(i(y)?(x):(y) .main() int a,b,c,d,t; . t=MAX(a+b,c+d); 宏展開(kāi):t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y) return(xy?x:y);main() int a,b,c,d,t; . t=max(a+b,c+d); 例例 用宏定義和函數(shù)實(shí)現(xiàn)同樣的功能用宏定義和函數(shù)實(shí)現(xiàn)同樣

7、的功能先求出a+b的值再傳遞給形參宏展開(kāi)時(shí)只是進(jìn)行字符替換,并不求a+b的值u帶參的宏與函數(shù)區(qū)別帶參的宏與函數(shù)區(qū)別帶參宏帶參宏函數(shù)函數(shù)處理過(guò)程不分配內(nèi)存簡(jiǎn)單的字符置換分配內(nèi)存先求實(shí)參值,再代入形參 處理時(shí)間編譯前程序運(yùn)行時(shí)參數(shù)類(lèi)型無(wú)類(lèi)型問(wèn)題定義實(shí)參,形參類(lèi)型程序長(zhǎng)度變長(zhǎng)不變運(yùn)行速度不占運(yùn)行時(shí)間調(diào)用和返回占時(shí)間u功能:功能:一個(gè)源文件可將另一個(gè)源文件的內(nèi)容全一個(gè)源文件可將另一個(gè)源文件的內(nèi)容全部包含進(jìn)來(lái)部包含進(jìn)來(lái)u一般形式:一般形式: #include “文件名文件名” 或或 #include 直接按標(biāo)準(zhǔn)目錄(庫(kù)函數(shù)頭文件所在的目錄)搜索“” 先在當(dāng)前目錄(可指定路徑)搜索,再搜索標(biāo)準(zhǔn)目錄#inc

8、lude “file2.c”file1.cfile2.cfile1.cfile2.cABAu處理過(guò)程處理過(guò)程:預(yù)編譯時(shí):預(yù)編譯時(shí), ,用被包含文件的內(nèi)容取代該用被包含文件的內(nèi)容取代該預(yù)處理命令,再對(duì)預(yù)處理命令,再對(duì)“包含包含”后的文件作一個(gè)源文后的文件作一個(gè)源文件編譯件編譯u被包含文件內(nèi)容被包含文件內(nèi)容源文件源文件( (* *.c).c)頭部文件頭部文件( (* *.h).h)宏定義數(shù)據(jù)結(jié)構(gòu)定義函數(shù)說(shuō)明等u 文件包含可嵌套#include “file2.c”file1.cAfile3.cC#include “file3.c”file2.c Bfile1.cAfile3.cfile2.c例例 文

9、件包含舉例文件包含舉例#include #include d:fengyibkcpowers.h#define MAX_POWER 10void main() int n; printf(numbert exp2t exp3t exp4n); printf(-t-t-t-n); for(n=1;n=MAX_POWER;n+) printf(%2dt %3dt %4dt %5dn,n,sqr(n),cube(n),quad(n);/* powers.h */#define sqr(x) (x)*(x)#define cube(x) (x)*(x)*(x)#define quad(x) (x)*(

10、x)*(x)*(x)下列程序段的輸出結(jié)果是下列程序段的輸出結(jié)果是_。#define MM(x,y) (x)+(y)printf(%d, MM(2*3,15)*2); 369.2 位運(yùn)算位運(yùn)算u按位與按位與 ( & )( & )u按位或按位或 ( | )( | )u按位取反按位取反 ( )( )u按位異或按位異或 ( )( )u左移左移 ( )( )( )u位運(yùn)算符只能對(duì)整型或字符型數(shù)據(jù)作運(yùn)算。位運(yùn)算符只能對(duì)整型或字符型數(shù)據(jù)作運(yùn)算。除除按位取反按位取反為為單目運(yùn)算符單目運(yùn)算符外,其余均為外,其余均為雙雙目運(yùn)算符目運(yùn)算符。u參與運(yùn)算時(shí),參與運(yùn)算時(shí),操作數(shù)必須先轉(zhuǎn)換成二進(jìn)制操作數(shù)必須

11、先轉(zhuǎn)換成二進(jìn)制形式形式,然后再執(zhí)行相應(yīng)的按位運(yùn)算。,然后再執(zhí)行相應(yīng)的按位運(yùn)算。9.2.1 位運(yùn)算符位運(yùn)算符u 按位與(按位與( & &)(1 1)格式:)格式:x&yx&y(2 2)規(guī)則:對(duì)應(yīng)位均為)規(guī)則:對(duì)應(yīng)位均為1 1時(shí)才為時(shí)才為1 1,否則為,否則為0 0 1101 & 1001 1001例如,例如,13&999.2.1 位運(yùn)算符位運(yùn)算符(1 1)格式:)格式:x|yx|y(2 2)規(guī)則:對(duì)應(yīng)位均為)規(guī)則:對(duì)應(yīng)位均為0 0時(shí)才為時(shí)才為0 0,否則為,否則為1 1如如: 13|9: 13|9 u 按位或(按位或( | | )9.2.1 位運(yùn)算

12、符位運(yùn)算符=13 1101 | 1001 1101(1 1)格式:)格式:xx(2 2)規(guī)則:各位翻轉(zhuǎn),即原來(lái)為)規(guī)則:各位翻轉(zhuǎn),即原來(lái)為1 1的位變成的位變成0 0,原,原來(lái)為來(lái)為0 0的位變成的位變成1 19.2.1 位運(yùn)算符位運(yùn)算符u 按位取反按位取反 ( )( )(1) (1) 格式:格式:xyxy(2) (2) 規(guī)則:對(duì)應(yīng)位相同時(shí)為規(guī)則:對(duì)應(yīng)位相同時(shí)為0 0,不同時(shí)為,不同時(shí)為1 1如如: 139: 139=4u 按位異或按位異或 ( )( ) 1101 1001 01009.2.1 位運(yùn)算符位運(yùn)算符(1)(1)格式:格式:x x 位數(shù)位數(shù)(2)(2)規(guī)則:使操作數(shù)的各位左移,低位補(bǔ)

13、規(guī)則:使操作數(shù)的各位左移,低位補(bǔ)0 0,高位,高位溢出溢出如:如:525200000000000001010000000000010100位移前位移前位移后位移后提示:向左移提示:向左移n 位,數(shù)據(jù)位,數(shù)據(jù)擴(kuò)大為原來(lái)的擴(kuò)大為原來(lái)的n 倍。倍。u 左移左移 ( )(x位數(shù)位數(shù)規(guī)則:使操作數(shù)的各位右移,移出的低位舍棄;規(guī)則:使操作數(shù)的各位右移,移出的低位舍棄;高位按以下方法處理:高位按以下方法處理:(1) 對(duì)無(wú)符號(hào)數(shù)和有符號(hào)中的正數(shù),對(duì)無(wú)符號(hào)數(shù)和有符號(hào)中的正數(shù),補(bǔ)補(bǔ)0;(2) 有符號(hào)數(shù)中的負(fù)數(shù)有符號(hào)數(shù)中的負(fù)數(shù), 補(bǔ)補(bǔ)1u 右移右移 ( )( )9.2.1 位運(yùn)算符位運(yùn)算符例如,例如,20 2000

14、00000000001010000000000010100位移前位移前位移后位移后9.2.1 位運(yùn)算符位運(yùn)算符u 6種位運(yùn)算符優(yōu)先順序種位運(yùn)算符優(yōu)先順序按位取反:按位取反: 左移左移,按位與:按位與:& &按位異或:按位異或: 按位或:按位或:| |高高低低9.2.1 位運(yùn)算符位運(yùn)算符u 與位運(yùn)算有關(guān)的復(fù)合的賦值運(yùn)算符與位運(yùn)算有關(guān)的復(fù)合的賦值運(yùn)算符= ,= ,= , &= , =, |=如:如:a|=ba|=b相當(dāng)于相當(dāng)于a=a|ba=a|b9.2.1 位運(yùn)算符位運(yùn)算符課堂練習(xí)課堂練習(xí)(1 1)十進(jìn)制數(shù)表示表達(dá)式)十進(jìn)制數(shù)表示表達(dá)式“12|01212|012”的運(yùn)算結(jié)果

15、的運(yùn)算結(jié)果是(是( )A) 1A) 1B) 0B) 0C) 14C) 14 D) 16D) 16C課堂練習(xí)課堂練習(xí)(2 2)設(shè)字符型變量)設(shè)字符型變量a=3,b=6a=3,b=6,計(jì)算表達(dá)式,計(jì)算表達(dá)式c=(ab)2c=(ab)3后,后,k的值是(的值是( )u 06B) 0177776C) 066 D) 0177766D 語(yǔ) 言 將 文 件 看 作 是 由 一 個(gè) 一 個(gè) 的 字 符 語(yǔ) 言 將 文 件 看 作 是 由 一 個(gè) 一 個(gè) 的 字 符(ASCII碼文件)或字節(jié)(二進(jìn)制文件)組成碼文件)或字節(jié)(二進(jìn)制文件)組成的。的。9.3 文件文件(1)根據(jù)文件編碼的方式,可分為)根據(jù)文件編碼的

16、方式,可分為ASCII文文件件和和二進(jìn)制文件二進(jìn)制文件。 ASCII文件又稱(chēng)為文件又稱(chēng)為文本文本文件文件。(2)根據(jù)文件的存取形式,可分為)根據(jù)文件的存取形式,可分為順序存取文順序存取文件件和和隨機(jī)存取文件隨機(jī)存取文件。u 文件的分類(lèi)文件的分類(lèi)9.3.1 文件和文件指針文件和文件指針(1)按文件的邏輯結(jié)構(gòu):)按文件的邏輯結(jié)構(gòu):記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長(zhǎng)和不記錄文件:由具有一定結(jié)構(gòu)的記錄組成(定長(zhǎng)和不定長(zhǎng))定長(zhǎng))流式文件流式文件:由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成:由一個(gè)個(gè)字符(字節(jié))數(shù)據(jù)順序組成(2)按存儲(chǔ)介質(zhì):)按存儲(chǔ)介質(zhì):普通文件:存儲(chǔ)介質(zhì)文件(磁盤(pán)、磁帶等)普通文件:存儲(chǔ)介質(zhì)

17、文件(磁盤(pán)、磁帶等)設(shè)備文件:非存儲(chǔ)介質(zhì)(鍵盤(pán)、顯示器、打印機(jī)等)設(shè)備文件:非存儲(chǔ)介質(zhì)(鍵盤(pán)、顯示器、打印機(jī)等)(3)按數(shù)據(jù)的組織形式:)按數(shù)據(jù)的組織形式:文本文件文本文件: ASCII文件,每個(gè)字節(jié)存放一個(gè)字符的文件,每個(gè)字節(jié)存放一個(gè)字符的ASCII碼碼二進(jìn)制文件二進(jìn)制文件:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存:數(shù)據(jù)按其在內(nèi)存中的存儲(chǔ)形式原樣存放放u 文件的分類(lèi)文件的分類(lèi)9.3.1 文件和文件指針文件和文件指針如如 int型數(shù)型數(shù)100000010011100010000內(nèi)存存儲(chǔ)形式內(nèi)存存儲(chǔ)形式0010011100010000二進(jìn)制形式二進(jìn)制形式0011000100110000001100000

18、011000000110000ASCII形式形式文本文件特點(diǎn)文本文件特點(diǎn):存儲(chǔ)量大、速度慢、便于對(duì)字符操作存儲(chǔ)量大、速度慢、便于對(duì)字符操作二進(jìn)制文件特點(diǎn)二進(jìn)制文件特點(diǎn):存儲(chǔ)量小、速度快、便于存放中間結(jié)果存儲(chǔ)量小、速度快、便于存放中間結(jié)果9.3.1 文件和文件指針文件和文件指針語(yǔ)言用一個(gè)指針變量指向一個(gè)文件,語(yǔ)言用一個(gè)指針變量指向一個(gè)文件, 這這個(gè)指針?lè)Q為文件指針。個(gè)指針?lè)Q為文件指針。文件文件指針指針定義形式:定義形式: FILE * 指針變量名;指針變量名; u 文件指針文件指針9.3.1 文件和文件指針文件和文件指針9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉u 用用fopen( )函數(shù)打開(kāi)

19、一個(gè)文件函數(shù)打開(kāi)一個(gè)文件u 用用fclose( )函數(shù)關(guān)閉一個(gè)文件函數(shù)關(guān)閉一個(gè)文件 1用法:用法: FILE *fp; fp=fopen(文件名,使用文件方式文件名,使用文件方式) ; 如:如: fpfopen(data.out,r); fp= fopen(“h:examfile1.out,rb) fp= fopen(“a:file2.out”, w)9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉2、文件使用方式、文件使用方式使用方式使用方式 意意 義義 “r” 打開(kāi)一個(gè)已經(jīng)存在的文本文件,只允許讀數(shù)據(jù)打開(kāi)一個(gè)已經(jīng)存在的文本文件,只允許讀數(shù)據(jù) “w” 打開(kāi)或新建一個(gè)文本文件,只允許寫(xiě)數(shù)據(jù)打開(kāi)或新

20、建一個(gè)文本文件,只允許寫(xiě)數(shù)據(jù) “a” 打開(kāi)一個(gè)文本文件,并在文件末尾追加數(shù)據(jù)打開(kāi)一個(gè)文本文件,并在文件末尾追加數(shù)據(jù) “r+” 讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀和寫(xiě)讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀和寫(xiě) “w+” 讀寫(xiě)打開(kāi)或建立一個(gè)文本文件,允許讀寫(xiě)讀寫(xiě)打開(kāi)或建立一個(gè)文本文件,允許讀寫(xiě) “a+” 讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀,或在文件末讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀,或在文件末尾追加數(shù)據(jù)尾追加數(shù)據(jù) 9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉使用方式使用方式 意意 義義 “rb” 只讀打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)只讀打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù) “wb” 只寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,只允許寫(xiě)只寫(xiě)打

21、開(kāi)或建立一個(gè)二進(jìn)制文件,只允許寫(xiě)數(shù)據(jù)數(shù)據(jù) “ab” 追加打開(kāi)一個(gè)二進(jìn)制文件,并在文件末尾寫(xiě)追加打開(kāi)一個(gè)二進(jìn)制文件,并在文件末尾寫(xiě)數(shù)據(jù)數(shù)據(jù) “rb+” 讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀和寫(xiě)讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀和寫(xiě) “wb+” 讀寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和讀寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫(xiě)寫(xiě) “ab+” 讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀,或在文讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀,或在文件末追加數(shù)據(jù)件末追加數(shù)據(jù) 9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉2、文件使用方式、文件使用方式 (1) 如果不能打開(kāi)指定文件,則如果不能打開(kāi)指定文件,則fopen( )函數(shù)返回一函數(shù)返回一個(gè)個(gè)

22、空指針空指針NULL 。 常用的打開(kāi)文件的方法:常用的打開(kāi)文件的方法: if(fp=fopen(文件名文件名,操作方式操作方式)=NULL) printf(can not open this filen); exit(0); 3說(shuō)明說(shuō)明9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉u關(guān)于關(guān)于exit()函數(shù)函數(shù)exit(0)表示程序正常退出表示程序正常退出exit(1)表示程序異常退出表示程序異常退出9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉u 文件的關(guān)閉文件的關(guān)閉fcolse()函數(shù)函數(shù)1用法:用法: fclose(文件指針文件指針);2功能:關(guān)閉功能:關(guān)閉“文件指針文件指針”所指向的文件。

23、所指向的文件。如果正常關(guān)閉了文件,則函數(shù)返回值為如果正常關(guān)閉了文件,則函數(shù)返回值為0;否則,返回值為非否則,返回值為非0。如,如,fclose(fp);9.3.2 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)文件打開(kāi)之后,就可以對(duì)它進(jìn)行讀與寫(xiě)的操作了。文件打開(kāi)之后,就可以對(duì)它進(jìn)行讀與寫(xiě)的操作了。u讀寫(xiě)文件中的一個(gè)字符讀寫(xiě)文件中的一個(gè)字符u讀寫(xiě)一個(gè)字符串讀寫(xiě)一個(gè)字符串u數(shù)據(jù)塊的讀寫(xiě)數(shù)據(jù)塊的讀寫(xiě)u對(duì)文件進(jìn)行格式化讀寫(xiě)對(duì)文件進(jìn)行格式化讀寫(xiě)u 讀寫(xiě)文件中的一個(gè)字符讀寫(xiě)文件中的一個(gè)字符(1)寫(xiě)字符函數(shù))寫(xiě)字符函數(shù)(fputc函數(shù)函數(shù)):把一個(gè)字符寫(xiě)到磁把一個(gè)字符寫(xiě)到磁盤(pán)文件上去。盤(pán)文

24、件上去。 調(diào)用的一般形式為:調(diào)用的一般形式為: fputc(ch,fp);功能:功能:將字符(將字符(ch的值)輸出到的值)輸出到fp所指向的文所指向的文件上去。件上去。9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)u 讀寫(xiě)文件中的一個(gè)字符讀寫(xiě)文件中的一個(gè)字符(2)讀讀字符函數(shù)字符函數(shù)(fgetc函數(shù)函數(shù)):從指定文件讀入一個(gè)從指定文件讀入一個(gè)字符。該文件必須是以讀或讀寫(xiě)方式打開(kāi)的字符。該文件必須是以讀或讀寫(xiě)方式打開(kāi)的調(diào)用的一般形式為:調(diào)用的一般形式為:ch=fgetc(fp);功能:從功能:從fp所指向的文件上所指向的文件上中讀取一個(gè)字符中讀取一個(gè)字符賦給賦給ch變量變量。9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)

25、u如果想從一個(gè)磁盤(pán)文件順序讀入字符并在屏幕上如果想從一個(gè)磁盤(pán)文件順序讀入字符并在屏幕上顯示出來(lái),可以:顯示出來(lái),可以: ch=fgetc(fp); while (ch!=EOF) putchar(ch); ch=fgetc(fp); 一個(gè)文件結(jié)束標(biāo)一個(gè)文件結(jié)束標(biāo)志志EOF,EOF在在stdio.h中定中定義為義為-19.3.3 文件的讀寫(xiě)文件的讀寫(xiě)【例例9.9】編寫(xiě)程序,將字符編寫(xiě)程序,將字符Z,寫(xiě)在文件,寫(xiě)在文件“test.txt”,然后從文件中將此文件讀出并在屏幕上顯示。然后從文件中將此文件讀出并在屏幕上顯示。#include void main( ) FILE *fp;fp=fopen(

26、d:test.txt,w);fputc(Z,fp); /*將字符將字符Z寫(xiě)入寫(xiě)入test文件中文件中*/fclose(fp);fp=fopen(d :test.txt,r);putchar(fgetc( fp); /*讀讀test文件中的字符并輸出到屏幕上文件中的字符并輸出到屏幕上*/close(fp);運(yùn)行程序運(yùn)行程序9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)u 讀寫(xiě)一個(gè)字符串讀寫(xiě)一個(gè)字符串1、 fgets()函數(shù)函數(shù)功能功能: 從指定的文件中讀一個(gè)字符串到字符從指定的文件中讀一個(gè)字符串到字符數(shù)組中數(shù)組中函數(shù)調(diào)用的形式為:函數(shù)調(diào)用的形式為: fgets(字符數(shù)組名,字符數(shù)組名,n,文件指針,文件指針)

27、; 其中其中n是一個(gè)正整數(shù)。表示從文件中讀出的是一個(gè)正整數(shù)。表示從文件中讀出的字符串不超過(guò)字符串不超過(guò) n-1個(gè)字符。在讀入的最后一個(gè)字符。在讀入的最后一個(gè)字符后加上串結(jié)束標(biāo)志個(gè)字符后加上串結(jié)束標(biāo)志0。9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)(2) fputs函數(shù)函數(shù)功能:向指定的文件寫(xiě)入一個(gè)字符串功能:向指定的文件寫(xiě)入一個(gè)字符串調(diào)用形式為:調(diào)用形式為: fputs(字符串,文件指針字符串,文件指針) 其中字符串可以是字符串常量,也可以其中字符串可以是字符串常量,也可以是字符數(shù)組名,或指針變量是字符數(shù)組名,或指針變量例如:例如:fputs(“abcd“,fp); 9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)【例例

28、9.10】已知已知test.txt文件中包含字符串文件中包含字符串“C program!”,利用,利用fgets函數(shù),讀取該文本文件。函數(shù),讀取該文本文件。#include #include void main( ) FILE *fp; char str50; if (in=fopen(test.txt, w)= =NULL) printf(cannot open the %sn); exit(1); fgets(str,11,fp);printf(n%s,str);fclose (fp);9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)運(yùn)行程序運(yùn)行程序u 數(shù)據(jù)塊的讀寫(xiě)數(shù)據(jù)塊的讀寫(xiě)1. 數(shù)據(jù)塊的寫(xiě)文件函數(shù)數(shù)據(jù)

29、塊的寫(xiě)文件函數(shù)fwrite( ) 調(diào)用格式:調(diào)用格式:fwrite(buffer, size, count, fp);2. 數(shù)據(jù)塊的讀文件函數(shù)數(shù)據(jù)塊的讀文件函數(shù)fread( ) 調(diào)用格式:調(diào)用格式:fread(buffer, size, count, fp);9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)【例例9.11】編寫(xiě)程序,將數(shù)組中的數(shù)寫(xiě)進(jìn)文件編寫(xiě)程序,將數(shù)組中的數(shù)寫(xiě)進(jìn)文件“test.txt”中。中。#include void main() int x5=1,2,3,4,5,i; FILE *fp; fp=fopen( d:test.txt,wb ); for(i=0;i5;i+) /*將數(shù)組中的元素

30、寫(xiě)進(jìn)文件中將數(shù)組中的元素寫(xiě)進(jìn)文件中*/ fwrite(&xi,sizeof(int),1,fp); fclose(fp); 9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)運(yùn)行程序運(yùn)行程序【例【例9.12】從例】從例9.11建立的建立的test文件中讀出數(shù)據(jù),并輸出到屏文件中讀出數(shù)據(jù),并輸出到屏幕上。幕上。#include void main() int y5,i; FILE *fp; fp=fopen(d:test.txt,rb ); for(i=0;i5;i+) /*將文件中的數(shù)據(jù)讀出存放于數(shù)組中將文件中的數(shù)據(jù)讀出存放于數(shù)組中*/ fread(y,sizeof(int),5,fp); fclose

31、(fp); for(i=0;i5;i+) /*在屏幕上輸出數(shù)組中的元素在屏幕上輸出數(shù)組中的元素*/ printf(n%d,yi);9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)運(yùn)行程序運(yùn)行程序u 對(duì)文件進(jìn)行格式化讀寫(xiě)對(duì)文件進(jìn)行格式化讀寫(xiě)fscanf函數(shù),函數(shù),fprintf函數(shù)與前面使用的函數(shù)與前面使用的scanf和和printf 函數(shù)的功能相似,都是格式化讀寫(xiě)函數(shù)。函數(shù)的功能相似,都是格式化讀寫(xiě)函數(shù)。 兩者的區(qū)別在于兩者的區(qū)別在于 fscanf 函數(shù)和函數(shù)和fprintf函數(shù)的函數(shù)的讀讀寫(xiě)對(duì)象不是鍵盤(pán)和顯示器,而是磁盤(pán)文件寫(xiě)對(duì)象不是鍵盤(pán)和顯示器,而是磁盤(pán)文件。 9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)u格式化讀寫(xiě)

32、文件的函數(shù)調(diào)用格式為:格式化讀寫(xiě)文件的函數(shù)調(diào)用格式為:fscanf(文件指針,格式字符串,輸入表列文件指針,格式字符串,輸入表列); fprintf(文件指針,格式字符串,輸出表列文件指針,格式字符串,輸出表列); fscanf(fp,%d%s,&i,s);fprintf(fp,%d%c,j,ch); 9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)【例例9.13】應(yīng)用應(yīng)用fprintf 函數(shù),建立和讀取文本文件內(nèi)容。函數(shù),建立和讀取文本文件內(nèi)容。#include void main() FILE *fp; long a2=1234,5678; if (fp=fopen(d:test.txt,w)=N

33、ULL) printf(“cannot open filen”); exit(0); fprintf(fp,%ld,%ldn,a0,a1); fclose(fp);9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)運(yùn)行程序運(yùn)行程序【例例9.14】打開(kāi)例打開(kāi)例9.11使用的文件,應(yīng)用使用的文件,應(yīng)用 fsanf函數(shù)讀取文本函數(shù)讀取文本文件內(nèi)容。文件內(nèi)容。#include void main() FILE *fp; long a2; if (fp=fopen(d:test.txt,r)=NULL) printf(“cannot open filen”); exit(0); fscanf(fp,%ld,%ld,&am

34、p;a0,&a1); printf(%ld,%ldn,a0,a1); fclose(fp);9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)運(yùn)行程序運(yùn)行程序9.3.4 文件的定位文件的定位u位置指針復(fù)位函數(shù)位置指針復(fù)位函數(shù)rewind()u隨機(jī)讀寫(xiě)與隨機(jī)讀寫(xiě)與fseek()函數(shù)函數(shù)u返回文件當(dāng)前位置的函數(shù)返回文件當(dāng)前位置的函數(shù)ftell()u位置指針復(fù)位函數(shù)位置指針復(fù)位函數(shù)rewind() 1用法:用法:rewind(文件指針文件指針); 2功能:使文件的位置指針?lè)祷氐轿募^。功能:使文件的位置指針?lè)祷氐轿募^。9.3.4 文件的定位文件的定位【例例9.15】利用利用rewind函數(shù),將文件函數(shù),將文

35、件text.txt中的內(nèi)容兩次輸出。中的內(nèi)容兩次輸出。#include void main( ) FILE *fp; fp1=fopen(d:test.txt, r+); while(!feof(fp) putchar(fgetc(fp); rewind(fp1); while(!feof(p1) putcchar(fgetc(fp); fclose(fp1); 9.3.3 文件的讀寫(xiě)文件的讀寫(xiě)運(yùn)行程序運(yùn)行程序(1)功能功能:使位置指針移到距起始點(diǎn)偏移使位置指針移到距起始點(diǎn)偏移w個(gè)個(gè)字節(jié)處。字節(jié)處。(2)用法)用法: fseek(文件指針,位移量,起始點(diǎn)文件指針,位移量,起始點(diǎn));9.3.4

36、文件的定位文件的定位ufseek函數(shù)函數(shù) 起始點(diǎn)的類(lèi)型:起始點(diǎn)的類(lèi)型: SEEK_SET0 文件頭,文件頭, SEEK_CUR1 當(dāng)前位置,當(dāng)前位置, SEEK_END2 文件尾文件尾 位移量:以起始點(diǎn)為起點(diǎn),前進(jìn)或后退位移量:以起始點(diǎn)為起點(diǎn),前進(jìn)或后退n個(gè)字節(jié)。個(gè)字節(jié)。注意:位移量為注意:位移量為long int型數(shù)據(jù)。型數(shù)據(jù)。 例:例:fseek(fp,10L,0)【例例9.16】根據(jù)例根據(jù)例9.24和和9.25的例子中文件,將此文件的例子中文件,將此文件d:text.txt中的數(shù)據(jù)輸入文件中,并在屏幕上顯示出來(lái)。中的數(shù)據(jù)輸入文件中,并在屏幕上顯示出來(lái)。#include void main( ) int i; FILE *fp; int y5; if(fp=fopen(d:text.txt,rb)= =NULL) printf(cannot open filen); exit(0); for(i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論