C語(yǔ)言 輸入輸出函數(shù)的輸出格式_第1頁(yè)
C語(yǔ)言 輸入輸出函數(shù)的輸出格式_第2頁(yè)
C語(yǔ)言 輸入輸出函數(shù)的輸出格式_第3頁(yè)
C語(yǔ)言 輸入輸出函數(shù)的輸出格式_第4頁(yè)
C語(yǔ)言 輸入輸出函數(shù)的輸出格式_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C語(yǔ)言基礎(chǔ) - 輸入輸出函數(shù)及控制流程語(yǔ)句(輸出格式)【轉(zhuǎn):C語(yǔ)言基礎(chǔ) - 輸入輸出函數(shù)及控制流程語(yǔ)句(輸出格式)2008年05月26日 星期一 13:51 1. 格式化規(guī)定符 Turbo C2.0提供的格式化規(guī)定符如下: 符號(hào) 作用 %d 十進(jìn)制有符號(hào)整數(shù) %u 十進(jìn)制無(wú)符號(hào)整數(shù) %f 浮點(diǎn)數(shù) %s 字符串 %c 單個(gè)字符 %p 指針的值 %e 指數(shù)形式的浮點(diǎn)數(shù) %x, %X 無(wú)符號(hào)以十六進(jìn)制表示的整數(shù) %0 無(wú)符號(hào)以八進(jìn)制表示的整數(shù) %g 自動(dòng)選擇合適的表示法 說(shuō)明: (1). 可以在"%"和字母之間插進(jìn)數(shù)字表示最大場(chǎng)寬。 例如: %3d 表示輸出3位整型數(shù), 不夠3位

2、右對(duì)齊。 % 表示輸出場(chǎng)寬為9的浮點(diǎn)數(shù), 其中小數(shù)位為2, 整數(shù)位為6,小數(shù)點(diǎn)占一位, 不夠9位右對(duì)齊。 %8s 表示輸出8個(gè)字符的字符串, 不夠8個(gè)字符右對(duì)齊。 如果字符串的長(zhǎng)度、或整型數(shù)位數(shù)超過(guò)說(shuō)明的場(chǎng)寬, 將按其實(shí)際長(zhǎng)度輸出。但對(duì)浮點(diǎn)數(shù), 若整數(shù)部分位數(shù)超過(guò)了說(shuō)明的整數(shù)位寬度, 將按實(shí)際整數(shù)位輸出;若小數(shù)部分位數(shù)超過(guò)了說(shuō)明的小數(shù)位寬度, 則按說(shuō)明的寬度以四舍五入輸出。另外, 若想在輸出值前加一些0, 就應(yīng)在場(chǎng)寬項(xiàng)前加個(gè)0。 例如: %04d 表示在輸出一個(gè)小于4位的數(shù)值時(shí), 將在前面補(bǔ)0使其總寬度為4位。 如果用浮點(diǎn)數(shù)表示字符或整型量的輸出格式, 小數(shù)點(diǎn)后的數(shù)字代表最大寬度,小數(shù)點(diǎn)前的數(shù)

3、字代表最小寬度。 例如: %6.9s 表示顯示一個(gè)長(zhǎng)度不小于6且不大于9的字符串。若大于9, 則第9個(gè)字符以后的內(nèi)容將被刪除。 (2). 可以在"%"和字母之間加小寫字母l, 表示輸出的是長(zhǎng)型數(shù)。 例如: %ld 表示輸出long整數(shù) %lf 表示輸出double浮點(diǎn)數(shù) (3). 可以控制輸出左對(duì)齊或右對(duì)齊, 即在"%"和字母之間加入一個(gè)"-" 號(hào)可說(shuō)明輸出為左對(duì)齊, 否則為右對(duì)齊。 例如: %-7d 表示輸出7位整數(shù)左對(duì)齊 %-10s 表示輸出10個(gè)字符左對(duì)齊 2. 一些特殊規(guī)定字符 字符 作用 n 換行 f 清屏并換頁(yè) r 回車

4、t Tab符 xhh 表示一個(gè)ASCII碼用16進(jìn)表示,其中hh是1到2個(gè)16進(jìn)制數(shù) 由本節(jié)所學(xué)的printf()函數(shù), 并結(jié)合上一節(jié)學(xué)習(xí)的數(shù)據(jù)類型, 編制下面的程序, 以加深對(duì)Turbo C2.0數(shù)據(jù)類型的了解。 例1 #include<stdio.h> #include<string.h> int main() char c, s20, *p; int a=1234, *i; p="How do you do" strcpy(s, "Hello, Comrade"); *i=12; c='x41' printf

5、("a=%dn", a); printf("a=%6dn", a); printf("a=%06dn", a); printf("a=%2dn", a); printf("*i=%4dn", *i); printf("*i=%-4dn", *i); printf("i=%pn", i); printf("f=%fn", f); printf("f=n", f); printf("x=%lfn",

6、x); printf("x=%18.16lfn", x); printf("c=%cn", c); printf("c=%xn", c); /*輸出字符的ASCII碼值c=41*/ printf("s=%sn", s); /*輸出數(shù)組字符串s=Hello, Comrade*/ printf("s=%6.9sn", s);/*輸出最多9個(gè)字符的字符串s=Hello, Co*/ printf("s=%pn", s); /*輸出數(shù)組字符串首字符地址s=FFBE*/ printf(&

7、quot;*p=%sn", p); /* 輸出指針字符串p=How do you do*/ printf("p=%pn", p); /*輸出指針的值p=0194*/ getch(); retunr 0; 上面結(jié)果中的地址值在不同計(jì)算機(jī)上可能不同。 例1.中第一條語(yǔ)句#include<stdio.h>的含義是調(diào)用另一個(gè)文件stdio.h, 這是一個(gè)頭文件, 其中包括全部標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)的數(shù)據(jù)類型定義和函數(shù)說(shuō)明。Turbo C2.0對(duì)每個(gè)庫(kù)函數(shù)便用的變量及函數(shù)類型都已作了定義與說(shuō)明, 放在相應(yīng)頭文件"*.h"中, 用戶用到這些函數(shù)時(shí)必

8、須要用#include<*.h>或#include"*. h"語(yǔ)句調(diào)用相應(yīng)的頭文件, 以供連接。若沒(méi)有用此語(yǔ)句說(shuō)明, 則連接時(shí)將會(huì)出現(xiàn)錯(cuò)誤。 二、scanf()函數(shù) scanf()函數(shù)是格式化輸入函數(shù), 它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤) 讀取輸入的信息。其調(diào)用格式為: scanf("<格式化字符串>", <地址表>); 格式化字符串包括以下三類不同的字符; 1. 格式化說(shuō)明符: 格式化說(shuō)明符與printf()函數(shù)中的格式說(shuō)明符基本相同。 2. 空白字符: 空白字符會(huì)使scanf()函數(shù)在讀操作中略去輸入中的一個(gè)或多個(gè)空白字符。

9、 3. 非空白字符: 一個(gè)非空白字符會(huì)使scanf()函數(shù)在讀入時(shí)剔除掉與這個(gè)非空白字符相同的字符。 地址表是需要讀入的所有變量的地址, 而不是變量本身。這與printf()函數(shù)完全不同, 要特別注意。各個(gè)變量的地址之間同","分開(kāi)。 例2: main() int i, j; printf("i, j=?n"); scanf("%d, %d", &i, &j); 上例中的scanf()函數(shù)先讀一個(gè)整型數(shù), 然后把接著輸入的逗號(hào)剔除掉, 最后讀入另一個(gè)整型數(shù)。如果","這一特定字符沒(méi)有找到, scan

10、f()函數(shù)就終止。若參數(shù)之間的分隔符為空格, 則參數(shù)之間必須輸入一個(gè)或多個(gè)空格。 說(shuō)明: (1). 對(duì)于字符串?dāng)?shù)組或字符串指針變量, 由于數(shù)組名和指針變量名本身就是地址, 因此使用scanf()函數(shù)時(shí), 不需要在它們前面加上"&"操作符。 例3 mian() char *p, str20; scanf("%s", p); /*從健盤輸入字符串*/ scanf("%s", str); printf("%sn", p); /*向屏幕輸出字符串*/ printf("%sn", str); (2

11、). 可以在格式化字符串中的"%"各格式化規(guī)定符之間加入一個(gè)整數(shù), 表示任何讀操作中的最大位數(shù)。 如例3中若規(guī)定只能輸入10字符給字符串指針p, 則第一條scanf() 函數(shù)語(yǔ)句變?yōu)?scanf("%10s", p); 程序運(yùn)行時(shí)一旦輸入字符個(gè)數(shù)大于10, p就不再繼續(xù)讀入, 而后面的一個(gè)讀入函數(shù)即scanf("%s", str)就會(huì)從第11個(gè)字符開(kāi)始讀入。 實(shí)際使用scanf()函數(shù)時(shí)存在一個(gè)問(wèn)題, 下面舉例進(jìn)行說(shuō)明: 當(dāng)使用多個(gè)scanf()函數(shù)連續(xù)給多個(gè)字符變量輸入時(shí), 例如: main() char c1, c2; scanf

12、("%c", &c1); scanf("%c", &c2); printf("c1 is %c, c2 is %c", c21, c2); 運(yùn)行該程序, 輸入一個(gè)字符A后回車 (要完成輸入必須回車), 在執(zhí)行scanf("%c", &c1)時(shí), 給變量c1賦值"A", 但回車符仍然留在緩沖區(qū)內(nèi), 執(zhí)行輸入語(yǔ)句scanf("%c", &c2)時(shí), 變量c2輸出的是一空行, 如果輸入AB后回車, 那么輸出結(jié)果為: c1 is A, c2 is B。

13、 要解決以上問(wèn)題, 可以在輸入函數(shù)前加入清除函數(shù)fflush()( 這個(gè)函數(shù)的使用方法將在本節(jié)最后講述)。修改以上程序變成: #include<stdio.h> main() char c1, c2; scanf("%c", &c1); fflush(stdin); scanf("%c", &c2); printf("c1 is %c, c2 is %c", c1, c2); 非格式化輸入輸出函數(shù) 非格式化輸入輸出函數(shù)可以由上面講述的標(biāo)準(zhǔn)格式化輸入輸出函數(shù)代替, 但這些函數(shù)編譯后代碼少, 相對(duì)占用內(nèi)存也小,

14、 從而提高了速度, 同時(shí)使用也比較方便。下面分別進(jìn)行介紹。 一、puts()和gets()函數(shù) 1. puts()函數(shù) puts()函數(shù)用來(lái)向標(biāo)準(zhǔn)輸出設(shè)備(屏幕)寫字符串并換行, 其調(diào)用格式為: puts(s); 其中s為字符串變量(字符串?dāng)?shù)組名或字符串指針)。 puts()函數(shù)的作用與語(yǔ)printf("%sn", s)相同。 例4: main() char s20, *f; /*定義字符串?dāng)?shù)組和指針變量*/ strcpy(s, "Hello! Turbo C2.0"); /*字符串?dāng)?shù)組變量賦值*/ f="Thank you" /*字

15、符串指針變量賦值*/ puts(s); puts(f); 說(shuō)明: (1). puts()函數(shù)只能輸出字符串, 不能輸出數(shù)值或進(jìn)行格式變換。 (2). 可以將字符串直接寫入puts()函數(shù)中。如: puts("Hello, Turbo C2.0"); 2. gets()函數(shù) gets()函數(shù)用來(lái)從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)讀取字符串直到回車結(jié)束, 但回車符不屬于這個(gè)字符串。其調(diào)用格式為: gets(s); 其中s為字符串變量(字符串?dāng)?shù)組名或字符串指針)。 gets(s)函數(shù)與scanf("%s", &s)相似, 但不完全相同, 使用scanf("

16、;%s", &s)函數(shù)輸入字符串時(shí)存在一個(gè)問(wèn)題, 就是如果輸入了空格會(huì)認(rèn)為輸入字符串結(jié)束,空格后的字符將作為下一個(gè)輸入項(xiàng)處理, 但gets() 函數(shù)將接收輸入的整個(gè)字符串直到回車為止。 例5 main() char s20, *f; printf("What's your name?n"); gets(s); /*等待輸入字符串直到回車結(jié)束*/ puts(s); /*將輸入的字符串輸出*/ puts("How old are you?"); gets(f); puts(f); 說(shuō)明: (1). gets(s)函數(shù)中的變量s為一字

17、符串。如果為單個(gè)字符, 編譯連接不會(huì)有錯(cuò)誤, 但運(yùn)行后會(huì)出現(xiàn)"Null pointer asignmemt"的錯(cuò)誤。 二、putchar()、getch()、getche()和getchar()函數(shù) 1. putchar()函數(shù) putchar()函數(shù)是向標(biāo)準(zhǔn)輸出設(shè)備輸出一個(gè)字符, 其調(diào)用格式為: putchar(ch); 其中ch為一個(gè)字符變量或常量。 putchar()函數(shù)的作用等同于printf("%c", ch); 例6: #include<stdio.h> main() char c: /*定義字符變量*/ c='B'

18、; /*給字符變量賦值*/ putchar(c); /*輸出該字符*/ putchar('x42'); /*輸出字母B*/ putchar(0x42); /*直接用ASCII碼值輸出字母B*/ 從本例中的連續(xù)四個(gè)字符輸出函數(shù)語(yǔ)句可以分清字符變量的不同賦值方法。 2. getch()、getche()和getchar()函數(shù) (1) getch()和getche()函數(shù) 這兩個(gè)函數(shù)都是從鍵盤上讀入一個(gè)字符。其調(diào)用格式為: getch(); getche(); 兩者的區(qū)別是: getch()函數(shù)不將讀入的字符回顯在顯示屏幕上, 而getche()函數(shù)卻將讀入的字符回顯到顯示屏幕上。

19、 例7: #include<stdio.h> main() char c, ch; c=getch(); /*從鍵盤上讀入一個(gè)字符不回顯送給字符變量c*/ putchar(c); /*輸出該字符*/ ch=getche(); /*從鍵盤上帶回顯的讀入一個(gè)字符送給字符變量ch*/ putchar(ch); 利用回顯和不回顯的特點(diǎn), 這兩個(gè)函數(shù)經(jīng)常用于交互輸入的過(guò)程中完成暫停等功能。 例8: #include<stdio.h> main() char c, s20; printf("Name:"); gets(s); printf("Press

20、 any key to confinue."); getch(); /*等待輸入任一鍵*/ (2) getchar()函數(shù) getchar()函數(shù)也是從鍵盤上讀入一個(gè)字符, 并帶回顯。它與前面兩個(gè)函數(shù)的區(qū)別在于: getchar()函數(shù)等待輸入直到按回車才結(jié)束, 回車前的所有輸入字符都會(huì)逐個(gè)顯示在屏幕上。但只有第一個(gè)字符作為函數(shù)的返回值。 getchar()函數(shù)的調(diào)用格式為: getchar(); 例9: #include<stdio.h> main() char c; c=getchar(); /*從鍵盤讀入字符直到回車結(jié)束*/ putchar(c); /*顯示輸入的第

21、一個(gè)字符*/ getch(); /*等待按任一健*/ 1.2 文件的輸入輸出函數(shù) 鍵盤、顯示器、打印機(jī)、磁盤驅(qū)動(dòng)器等邏輯設(shè)備, 其輸入輸出都可以通過(guò)文件管理的方法來(lái)完成。而在編程時(shí)使用最多的要算是磁盤文件, 因此本節(jié)主要以磁盤文件為主, 詳細(xì)介紹Turbo C2.0提供的文件操作函數(shù), 當(dāng)然這些對(duì)文件的操作函數(shù)也適合于非磁盤文件的情況。 另外, Turbo C2.0提供了兩類關(guān)于文件的函數(shù)。一類稱做標(biāo)準(zhǔn)文件函數(shù)也稱緩沖型文件函數(shù), 這是ANSI標(biāo)準(zhǔn)定義的函數(shù); 另一類叫非標(biāo)準(zhǔn)文件函數(shù), 也稱非緩沖型文件函數(shù)。這類函數(shù)最早公用于UNIX操作系統(tǒng), 但現(xiàn)在MS-DOS3.0 以上版本的操作系統(tǒng)也可

22、以使用。下面分別進(jìn)行介紹。 標(biāo)準(zhǔn)文件函數(shù) 標(biāo)準(zhǔn)文件函數(shù)主要包括文件的打開(kāi)、關(guān)閉、讀和寫等函數(shù)。不象BASIC 、FORTRAN語(yǔ)方有順序文件和隨機(jī)文件之分, 在打開(kāi)時(shí)就應(yīng)按不同的方式確定。Turbo C2.0并不區(qū)分這兩種文件, 但提供了兩組函數(shù), 即順序讀寫函數(shù)和隨機(jī)讀寫函數(shù)。 一、文件的打開(kāi)和關(guān)閉 任何一個(gè)文件在使用之前和使用之后, 必須要進(jìn)行打開(kāi)和關(guān)閉, 這是因?yàn)椴僮飨到y(tǒng)對(duì)于同時(shí)打開(kāi)的文件數(shù)目是有限制的, DOS操作系統(tǒng)中,可以在DEVICE.SYS中定義允許同時(shí)打開(kāi)的文件數(shù)n(用files=n定義)。其中n 為可同時(shí)打開(kāi)的文件數(shù), 一般n<=20。因此在使用文件前應(yīng)打開(kāi)文件, 才

23、可對(duì)其中的信息進(jìn)行存取。用完之后需要關(guān)閉, 否則將會(huì)出現(xiàn)一些意想不到的錯(cuò)誤。Turbo C2.0提供了打開(kāi)和關(guān)閉文件的函數(shù)。 1. fopen()函數(shù) fopen函數(shù)用于打開(kāi)文件, 其調(diào)用格式為: FILE *fopen(char *filename, *type); 在介紹這個(gè)函數(shù)之;前, 先了解一下下面的知識(shí)。 (1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有區(qū)別的, Turbo C2.0 為編程者和被訪問(wèn)的設(shè)備之間提供了一層抽象的東西, 稱之為"流", 而將具體的實(shí)際設(shè)備叫做文件。流是一個(gè)邏輯設(shè)備, 具有相同的行為。因此, 用來(lái)進(jìn)行

24、磁盤文件寫的函數(shù)也同樣可以用來(lái)進(jìn)行打印機(jī)的寫入。在Turbo C2.0中有兩種性質(zhì)的流: 文字流( textstream)和二進(jìn)制(binary stream)。對(duì)磁盤來(lái)說(shuō)就是文本文件和二進(jìn)制文件。本軟件為了便于讓讀者易理解Turbo C2.0語(yǔ)言而沒(méi)有對(duì)流和文件作特別區(qū)分。 (2) 文件指針FILE 實(shí)際上FILE是一個(gè)新的數(shù)據(jù)類型。它是Turbo C2.0的基本數(shù)據(jù)類型的集合,稱之為結(jié)構(gòu)指針。有關(guān)結(jié)構(gòu)的概念將在第四節(jié)中詳細(xì)介紹, 這里只要將FILE理解為一個(gè)包括了文件管理有關(guān)信息的數(shù)據(jù)結(jié)構(gòu), 即在打開(kāi)文件時(shí)必須先定義一個(gè)文件指針。 (3) 以后介紹的函數(shù)調(diào)用格式將直接寫出形式參數(shù)的數(shù)據(jù)類型

25、和函數(shù)返回值的數(shù)據(jù)類型。例如: 上面打開(kāi)文件的函數(shù), 返回一個(gè)文件指針, 其中形式參數(shù)有兩個(gè), 均為字符型變量(字符串?dāng)?shù)組或字符串指針)。本軟件不再對(duì)函數(shù)的調(diào)用格式作詳細(xì)說(shuō)明。 現(xiàn)在再來(lái)看打開(kāi)文件函數(shù)的用法。 fopen()函數(shù)中第一個(gè)形式參數(shù)表示文件名, 可以包含路徑和文件名兩部分。如: "B:TEST.DAT" "C:TCTEST.DAT" 如果將路徑寫成"C:TCTEST.DAT"是不正確的, 這一點(diǎn)要特別注意。 第二個(gè)形式參數(shù)表示打開(kāi)文件的類型。關(guān)于文件類型的規(guī)定參見(jiàn)下表。 表 文件操作類型 字符 含義 "r&quo

26、t; 打開(kāi)文字文件只讀 "w" 創(chuàng)建文字文件只寫 "a" 增補(bǔ), 如果文件不存在則創(chuàng)建一個(gè) "r+" 打開(kāi)一個(gè)文字文件讀/寫 "w+" 創(chuàng)建一個(gè)文字文件讀/寫 "a+" 打開(kāi)或創(chuàng)建一個(gè)文件增補(bǔ) "b" 二進(jìn)制文件(可以和上面每一項(xiàng)合用) "t" 文這文件(默認(rèn)項(xiàng)) 如果要打開(kāi)一個(gè)CCDOS子目錄中, 文件名為CLIB的二進(jìn)制文件, 可寫成: fopen("c:ccdosclib", "rb"); 如果成功的打開(kāi)一個(gè)文

27、件, fopen()函數(shù)返回文件指針, 否則返回空指針(NULL)。由此可判斷文件打開(kāi)是否成功。 2. fclose()函數(shù) fclose()函數(shù)用來(lái)關(guān)閉一個(gè)由fopen()函數(shù)打開(kāi)的文件 , 其調(diào)用格式為: int fclose(FILE *stream); 該函數(shù)返回一個(gè)整型數(shù)。當(dāng)文件關(guān)閉成功時(shí), 返回0,否則返回一個(gè)非零值??梢愿鶕?jù)函數(shù)的返回值判斷文件是否關(guān)閉成功。 例10: #iclude<stdio.h> main() FILE *fp; /*定義一個(gè)文件指針*/ int i; fp=fopen("CLIB", "rb"); /*打

28、開(kāi)當(dāng)前目錄名為CLIB的文件只讀*/ if(fp=NULL) /*判斷文件是否打開(kāi)成功*/ puts("File open error");/*提示打開(kāi)不成功*/ i=fclose(fp); /*關(guān)閉打開(kāi)的文件*/ if(i=0) /*判斷文件是否關(guān)閉成功*/ printf("O,K"); /*提示關(guān)閉成功*/ else puts("File close error");/*提示關(guān)閉不成功*/ 二、有關(guān)文件操作的函數(shù) 本節(jié)所講的文件讀寫函數(shù)均是指順序讀寫, 即讀寫了一條信息后, 指針自動(dòng)加1。下面分別介紹寫操作函數(shù)和讀操作函數(shù)。 1.

29、 文件的順序?qū)懞瘮?shù) fprintf()、fputs()和fputc()函數(shù) 函數(shù)fprintf()、fputs()和fputc()均為文件的順序?qū)懖僮骱瘮?shù), 其調(diào)用格式如下: int fprintf(FILE *stream, char *format, <variable-list>); int fputs(char *string, FILE *steam); int fputc(int ch, FILE *steam); 上述三個(gè)函數(shù)的返回值均為整型量。fprintf() 函數(shù)的返回值為實(shí)際寫入文件中的字罕個(gè)數(shù)(字節(jié)數(shù))。如果寫錯(cuò)誤, 則返回一個(gè)負(fù)數(shù), fputs()函數(shù)返回

30、0時(shí)表明將string指針?biāo)傅淖址畬懭胛募械牟僮鞒晒? 返回非0時(shí), 表明寫操作失敗。fputc()函數(shù)返回一個(gè)向文件所寫字符的值, 此時(shí)寫操作成功, 否則返回EOF(文件結(jié)束結(jié)束其值為-1, 在stdio.h中定義)表示寫操作錯(cuò)誤。 fprintf( ) 函數(shù)中格式化的規(guī)定與printf( ) 函數(shù)相同, 所不同的只是fprintf()函數(shù)是向文件中寫入。而printf()是向屏幕輸出。 下面介紹一個(gè)例子, 運(yùn)行后產(chǎn)后一個(gè)test.dat的文件。 例11: #include<stdio.h> main() char *s="That's good news

31、"); /*定義字符串指針并初始化*/ int i=617; /*定義整型變量并初始化*/ FILE *fp; /*定義文件指針*/ fp=fopne("test.dat", "w"); /*建立一個(gè)文字文件只寫*/ fputs("Your score of TOEFLis", fp);/*向所建文件寫入一串字符*/ fputc(':', fp); /*向所建文件寫冒號(hào):*/ fprintf(fp, "%dn", i); /*向所建文件寫一整型數(shù)*/ fprintf(fp, "%

32、s", s); /*向所建文件寫一字符串*/ fclose(fp); /*關(guān)閉文件*/ 用DOS的TYPE命令顯示TEST.DAT的內(nèi)容如下所示: 屏幕顯示 Your score of TOEFL is: 617 That's good news 2. 文件的順序讀操作函數(shù) fscanf()、fgets()和fgetc()函數(shù) 函數(shù)fscanf()、fgets()和fgetc()均為文件的順序讀操作函數(shù), 其調(diào)用格式如下: int fscanf(FILE *stream, char *format, <address-list>); char fgets(char

33、 *string, int n, FILE *steam); int fgetc(FILE *steam); fscanf()函數(shù)的用法與scanf()函數(shù)相似, 只是它是從文件中讀到信息。fscanf()函數(shù)的返回值為EOF(即-1), 表明讀錯(cuò)誤, 否則讀數(shù)據(jù)成功。fgets()函數(shù)從文件中讀取至多n-1個(gè)字符(n用來(lái)指定字符數(shù)), 并把它們放入string指向的字符串中, 在讀入之后自動(dòng)向字符串未尾加一個(gè)空字符, 讀成功返回string指針,失敗返回一個(gè)空指針。fgetc()函數(shù)返回文件當(dāng)前位置的一個(gè)字符, 讀錯(cuò)誤時(shí)返回EOF。 下面程序讀取例11產(chǎn)生的test.dat文件, 并將讀出的

34、結(jié)果顯示在屏幕上。 例12 #include<stdio.h> main() char *s, m20; int i; FILE *fp; fp=fopen("test.dat", "r"); fgets(s, 24, fp); printf("%s", s); fscanf(fp, "%d", &i); printf("%d", i); putchar(fgetc(fp); fgets(m, 17, fp); puts(m); fclose(fp); getch(); 運(yùn)行

35、后屏幕顯示: Your score of TOEFL is: 617 That's good news 如果將上例中fscanf(fp, "%d", &i)改為fscanf(fp, "%s", m), 再將其后的輸出語(yǔ)句改為printf("%s", m), 則可得出同樣的結(jié)果。由此可見(jiàn)Turbo C2. 0中只要是讀文字文件, 則不論是字符還是數(shù)字都將按其ASCII值處理。 另外還要說(shuō)明的一點(diǎn)就是fscanf()函數(shù)讀到空白符時(shí), 便自動(dòng)結(jié)束, 在使用時(shí)要特別注意。 3. 文件的隨機(jī)讀寫 有時(shí)用戶想直接讀取文件中間某處

36、的信息, 若用文件的順序讀寫必須從文件頭開(kāi)始直到要求的文件位置再讀, 這顯然不方便。Turbo C2.0提供了一組文件的隨機(jī)讀寫函數(shù), 即可以將文件位置指針定位在所要求讀寫的地方直接讀寫。 文件的隨機(jī)讀寫函數(shù)如下: int fseek (FILE *stream, long offset, int fromwhere); int fread(void *buf, int size, int count, FILE *stream); int fwrite(void *buf, int size, int count, FILE *stream); long ftell(FILE *stream

37、); fseek()函數(shù)的作用是將文件的位置指針設(shè)置到從fromwhere開(kāi)始的第offset字節(jié)的位置上, 其中fromwhere是下列幾個(gè)宏定義之一: 文件位置指針起始計(jì)算位置fromwhere 符號(hào)常數(shù) 數(shù)值 含義 SEEK_SET 0 從文件開(kāi)頭 SEEK_CUR 1 從文件指針的現(xiàn)行位置 SEEK_END 2 從文件末尾 offset是指文件位置指針從指定開(kāi)始位置(fromwhere指出的位置)跳過(guò)的字節(jié)數(shù)。它是一個(gè)長(zhǎng)整型量, 以支持大于64K字節(jié)的文件。fseek()函數(shù)一般用于對(duì)二進(jìn)制文件進(jìn)行操作。 當(dāng)fseek()函數(shù)返回0時(shí)表明操作成功, 返回非0表示失敗。 下面程序從二進(jìn)制

38、文件test_b.dat中讀取第8個(gè)字節(jié)。 例13: #include<stdio.h> main() FILE *fp; if(fp=fopen("test_b.dat", "rb")=NULL) printf("Can't open file"); exit(1); fseek(fp, 8. 1, SEEK_SET); fgetc(fp); fclose(fp); fread()函數(shù)是從文件中讀count個(gè)字段, 每個(gè)字段長(zhǎng)度為size個(gè)字節(jié), 并把它們存放到buf指針?biāo)傅木彌_器中。 fwrite()函數(shù)是把

39、buf指針?biāo)傅木彌_器中, 長(zhǎng)度為size個(gè)字節(jié)的count個(gè)字段寫到stream指向的文件中去。 隨著讀和寫字節(jié)數(shù)的增大, 文件位置指示器也增大, 讀多少個(gè)字節(jié), 文件位置指示器相應(yīng)也跳過(guò)多少個(gè)字節(jié)。讀寫完畢函數(shù)返回所讀和所寫的字段個(gè)數(shù)。 ftell()函數(shù)返回文件位置指示器的當(dāng)前值, 這個(gè)值是指示器從文件頭開(kāi)始算起的字節(jié)數(shù), 返回的數(shù)為長(zhǎng)整型數(shù), 當(dāng)返回-1時(shí), 表明出現(xiàn)錯(cuò)誤C語(yǔ)言scanf函數(shù)學(xué)習(xí)筆記今天下午做了一些關(guān)于scanf函數(shù)的學(xué)習(xí),總結(jié)一下,以備后查。測(cè)試程序比較雜,測(cè)試用例也比較雜,貼出來(lái)沒(méi)啥意義。下面是總結(jié):字符類型:/讀取字符時(shí),當(dāng)格式控制串中無(wú)空白符 ,讀取參數(shù)是嚴(yán)格按照一個(gè)字符一個(gè)字符的讀取 遇到空白符時(shí)讀取空白符, 直到所有參數(shù)讀滿為止/當(dāng)格式控制串中有空白符時(shí) ,讀取參數(shù)也是嚴(yán)格按照一個(gè)字符一個(gè)字符的讀取,但遇到空白符時(shí)跳過(guò)空白符繼

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論