版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1第第3 3章章 標(biāo)準輸入與輸出標(biāo)準輸入與輸出3.1 3.1 概述概述3.2 3.2 字符輸入輸出函數(shù)字符輸入輸出函數(shù)3.3 3.3 格式化輸入和輸出函數(shù)格式化輸入和輸出函數(shù) 3.4 3.4 輸入和輸出函數(shù)的討論輸入和輸出函數(shù)的討論2 通過終端輸入(如鍵盤、鼠標(biāo)等),也稱為標(biāo)準輸入通過終端輸入(如鍵盤、鼠標(biāo)等),也稱為標(biāo)準輸入(standard inputstandard input),直接向終端輸出(如顯示器、打印機等),),直接向終端輸出(如顯示器、打印機等),也稱為標(biāo)準輸出(也稱為標(biāo)準輸出(standard outputstandard output)。)。3.1 3.1 概述概述 C
2、C語言本身沒有提供輸入輸出語句,語言本身沒有提供輸入輸出語句,C C語言中的所有語言中的所有I/OI/O操作都操作都是通過函數(shù)調(diào)用來實現(xiàn),而這些并非是通過函數(shù)調(diào)用來實現(xiàn),而這些并非C C語言一部分的輸入輸出函數(shù)語言一部分的輸入輸出函數(shù)均以目標(biāo)級程序的方式提供,并存放在一個均以目標(biāo)級程序的方式提供,并存放在一個C C標(biāo)準函數(shù)庫中。標(biāo)準函數(shù)庫中。 每一個標(biāo)準庫都有一個相應(yīng)的頭文件,該頭文件包含了該庫中每一個標(biāo)準庫都有一個相應(yīng)的頭文件,該頭文件包含了該庫中所有函數(shù)的函數(shù)原型及其相關(guān)信息。在調(diào)用這些庫函數(shù)時,要用預(yù)所有函數(shù)的函數(shù)原型及其相關(guān)信息。在調(diào)用這些庫函數(shù)時,要用預(yù)處理命令處理命令“#inclu
3、de”#include”將有關(guān)的將有關(guān)的“頭文件頭文件”包括到用戶源程序中。包括到用戶源程序中。標(biāo)準輸入輸出庫函數(shù)對應(yīng)的頭文件是標(biāo)準輸入輸出庫函數(shù)對應(yīng)的頭文件是“stdio.h”stdio.h”。stdiostdio是是standard input & outputstandard input & output的縮寫。因此,讀者在調(diào)用標(biāo)準輸入輸?shù)目s寫。因此,讀者在調(diào)用標(biāo)準輸入輸出庫函數(shù)時,你的源程序開頭應(yīng)該有如下編譯預(yù)處理命令:出庫函數(shù)時,你的源程序開頭應(yīng)該有如下編譯預(yù)處理命令: #include#include 或或 #includestdio.h#includestdio.
4、h33.2 3.2 字符輸入輸出函數(shù)字符輸入輸出函數(shù)3.2.1 3.2.1 字符輸出函數(shù)字符輸出函數(shù)putchar()putchar() putchar() putchar()函數(shù)是向屏幕一個字符函數(shù)是向屏幕一個字符, , 其調(diào)用格式為其調(diào)用格式為: : putchar(ch) putchar(ch); 其中其中chch為一個字符變量、字符常量或整型常量。為一個字符變量、字符常量或整型常量。 /* 本程序測試多種類型數(shù)據(jù)作putchar()函數(shù)參數(shù)的輸出情況 */ #include #include main() main() char c=A char c=A; /* 定義字符變量并初始化
5、*/ putchar(c) putchar(c); /* 輸出變量C的值即字符A */ putchar(A) putchar(A); /* 輸出字符A */ putchar(x41) putchar(x41); /* 輸出字符A ,它以轉(zhuǎn)義字符表示,十六進制 */ putchar(0 x41) putchar(0 x41); /* 直接用ASCII碼值輸出字符A */ putchar(101) putchar(101); /* 輸出字符A,它以轉(zhuǎn)義字符表示,八進制 */ 43.2.2 3.2.2 帶緩沖區(qū)的字符輸入函數(shù)帶緩沖區(qū)的字符輸入函數(shù)getchar()getchar() getchar(
6、) getchar()函數(shù)的功能是從標(biāo)準輸入文件(通常是鍵盤,亦指函數(shù)的功能是從標(biāo)準輸入文件(通常是鍵盤,亦指磁盤文件)讀取一字節(jié)代碼(即一個字符),并回顯。所謂回顯,磁盤文件)讀取一字節(jié)代碼(即一個字符),并回顯。所謂回顯,是指輸入一個字符的同時又在屏幕上顯示出該字符。這是標(biāo)準是指輸入一個字符的同時又在屏幕上顯示出該字符。這是標(biāo)準C C提提供的字符輸入函數(shù),因此也是最常用的字符輸入(尤其是鍵盤輸入)供的字符輸入函數(shù),因此也是最常用的字符輸入(尤其是鍵盤輸入)函數(shù)。函數(shù)。 鍵盤緩沖區(qū)(實際上應(yīng)該稱作輸入流即鍵盤緩沖區(qū)(實際上應(yīng)該稱作輸入流即stdin stdin 流)。所謂鍵盤流)。所謂鍵盤緩
7、沖區(qū),是指在內(nèi)存開辟的一片臨時單元,用來暫時存放從鍵盤輸緩沖區(qū),是指在內(nèi)存開辟的一片臨時單元,用來暫時存放從鍵盤輸入的字符。入的字符。getchar()getchar()函數(shù)是帶鍵盤緩沖區(qū)的輸入函數(shù)函數(shù)是帶鍵盤緩沖區(qū)的輸入函數(shù),是指當(dāng)從,是指當(dāng)從鍵盤輸入字符時,這些字符先存放在鍵盤緩沖區(qū),如果不敲回車鍵,鍵盤輸入字符時,這些字符先存放在鍵盤緩沖區(qū),如果不敲回車鍵,getchar()getchar()函數(shù)并沒有真正被執(zhí)行(即所謂被激活);僅當(dāng)回車鍵函數(shù)并沒有真正被執(zhí)行(即所謂被激活);僅當(dāng)回車鍵也被送入鍵盤緩沖區(qū)后,也被送入鍵盤緩沖區(qū)后,getchar()getchar()函數(shù)才從鍵盤緩沖區(qū)中讀
8、取一函數(shù)才從鍵盤緩沖區(qū)中讀取一個字符。個字符。 5強調(diào)以下三點:強調(diào)以下三點: (1) (1) 調(diào)用調(diào)用getchar()getchar()函數(shù)輸入字符時,必須用另一個函數(shù)輸入字符時,必須用另一個變量(字符變量或整型變量)接收輸入的字符。例如:變量(字符變量或整型變量)接收輸入的字符。例如: ch = getchar()ch = getchar(); (2) (2) 調(diào)用調(diào)用getchar()getchar()函數(shù)輸入字符時,僅當(dāng)敲入回車函數(shù)輸入字符時,僅當(dāng)敲入回車鍵后,函數(shù)才被激活。鍵后,函數(shù)才被激活。 (3) (3) 調(diào)用該函數(shù)時,輸入的每一個字符,包括空白符調(diào)用該函數(shù)時,輸入的每一個字符
9、,包括空白符(即空格、制表符和回車符),都被送存到鍵盤緩沖區(qū)。(即空格、制表符和回車符),都被送存到鍵盤緩沖區(qū)。6 /* 本程序調(diào)用getchar()函數(shù)輸入一個字符 */ #include #include main() main() char c char c; /* 定義字符變量 */ c = getchar() c = getchar(); /* 接收鍵盤輸入的一個字符 */ putchar(c) putchar(c); /* 輸出該字符 */ putchar(n) putchar(n); 7 3.2.3 3.2.3 不帶緩沖區(qū)的字符輸入函數(shù)不帶緩沖區(qū)的字符輸入函數(shù)getch()get
10、ch()和和getche()getche() 這是某些編譯器,譬如這是某些編譯器,譬如Turbo CTurbo C新增加的兩個字符輸新增加的兩個字符輸入函數(shù),這兩個函數(shù)都是從鍵盤上讀入一個字符。兩者的入函數(shù),這兩個函數(shù)都是從鍵盤上讀入一個字符。兩者的區(qū)別是區(qū)別是: getch(): getch()函數(shù)將讀入的字符函數(shù)將讀入的字符不回顯不回顯在屏幕上在屏幕上, , 而而getche()getche()函數(shù)卻將讀入的字符函數(shù)卻將讀入的字符回顯回顯到顯示屏幕上。到顯示屏幕上。8 /* 本程序調(diào)用getchar()函數(shù)輸入一個字符 */ #include #include main() main()
11、char c, ch char c, ch; c=getch()c=getch(); /* 從鍵盤上讀一字符不回顯送給變量c */ putchar(c) putchar(c); /* 輸出該字符*/ ch=getche() ch=getche();/* 從鍵盤讀一字符送給變量ch并回顯 */ putchar(ch) putchar(ch);/* 輸出該字符*/ 93.3 3.3 格式化輸入和輸出函數(shù)格式化輸入和輸出函數(shù)3.3.1 printf()3.3.1 printf()函數(shù)函數(shù) 用于按指定格式向標(biāo)準輸出設(shè)備用于按指定格式向標(biāo)準輸出設(shè)備( (屏幕屏幕) )輸出。有兩種形式:輸出。有兩種形式:
12、 printf( printf(字符串字符串); 例如,下面的語句:例如,下面的語句: printf(How are youprintf(How are you!n)n);是在屏幕上輸出這樣一行:是在屏幕上輸出這樣一行: How are youHow are you!這種形式的輸出并沒有指定輸出格式。這種形式的輸出并沒有指定輸出格式。10另一種形式是:另一種形式是:printf(printf(, , ) “格式控制串格式控制串”是由是由0 0個或多個個或多個格式轉(zhuǎn)換說明格式轉(zhuǎn)換說明組成的一個字符組成的一個字符串序列。格式轉(zhuǎn)換說明的一般形式為:串序列。格式轉(zhuǎn)換說明的一般形式為: % %flag
13、width.prechlLflag width.prechlL輸出格式符輸出格式符格式修飾符(見表格式修飾符(見表3-23-2) 見表見表3-13-1 printf(“%d”, a) printf(“%d”, a); printf(%d%f, a,x) printf(%d%f, a,x); printf(a=%d, b=%d, a+b=%dn, a,b,a+b) printf(a=%d, b=%d, a+b=%dn, a,b,a+b); printf(“a=%-d, x=%+8.2f, x+y=%Lfn, a,x,x+y) printf(“a=%-d, x=%+8.2f, x+y=%Lfn,
14、a,x,x+y); 左對齊左對齊 正數(shù)也要加正號 輸出共占輸出共占8 8位位, ,其中小數(shù)占兩位其中小數(shù)占兩位輸出為long double型113.3.2 scanf()3.3.2 scanf()函數(shù)函數(shù) scanf() scanf()函數(shù)的一般形式為:函數(shù)的一般形式為: int scanf(int scanf(, ) “格式控制串格式控制串”是由是由0 0個或多個個或多個格式轉(zhuǎn)換說明格式轉(zhuǎn)換說明組成的一個字符組成的一個字符串序列。格式轉(zhuǎn)換說明的一般形式為:串序列。格式轉(zhuǎn)換說明的一般形式為: % % * *widthh/l/Lwidthh/l/L輸入格式符輸入格式符 格式修飾符(見表格式修飾符
15、(見表3-43-4) 見表見表3-33-3 格式轉(zhuǎn)換說明的作用是引導(dǎo)對下一輸入項進行轉(zhuǎn)換。格式轉(zhuǎn)換說明的作用是引導(dǎo)對下一輸入項進行轉(zhuǎn)換。 “ “地址列表地址列表”中給出一個或多個中給出一個或多個輸入項輸入項, ,輸入項之間用逗號分輸入項之間用逗號分隔。隔。 從概念上講,輸入項的表示形式是從概念上講,輸入項的表示形式是指針指針,指向存儲輸入數(shù)據(jù)的,指向存儲輸入數(shù)據(jù)的變量。變量。因此,輸入項必須指明變量的地址。因此,輸入項必須指明變量的地址。C C語言提供了一個取變語言提供了一個取變量地址的運算符量地址的運算符“& &”,只要將它作用在變量上,就能得到該變量,只要將它作用在變量上,
16、就能得到該變量的地址。例如,的地址。例如,&a,&b&a,&b分別表示變量分別表示變量a a和變量和變量b b 的地址。的地址。12 例如,若要為int變量a和b從鍵盤輸入數(shù)據(jù),如果寫作: scanf(%d%d, a,b);是不正確的??捎萌缦抡Z句實現(xiàn): scanf(%d%d, &a,&b); 如果將上述語句應(yīng)改為: scanf(%d,%d, &a,&b);即在兩個格式轉(zhuǎn)換說明之間插入一個逗號,輸入數(shù)據(jù)時也必須輸入一個逗號,如: 123,4567 要注意的是,不要輕易將“c”格式與其它格式混在一起用,以免出錯。例如,設(shè)a為int型
17、變量,ch是char型變量,對于語句: scanf(%d%c,&a,&ch);若輸入為 29A /* 表示空格符 */其結(jié)果是將數(shù)值29送a,而將一個空格字符送ch。 13 3.4 3.4 關(guān)于格式化輸入和輸出函數(shù)的進一步討論關(guān)于格式化輸入和輸出函數(shù)的進一步討論 3.4.1 printf() 3.4.1 printf()和和scanf()scanf()函數(shù)的返回值問題函數(shù)的返回值問題 若成功,若成功,printf()printf()函數(shù)返回輸出的字符個數(shù),出錯時返回負數(shù)。函數(shù)返回輸出的字符個數(shù),出錯時返回負數(shù)。 /* 本程序測試printf()函數(shù)的返回值 */ #includ
18、e #include main() main() int count int count; /* 定義count,用來接收返回值 */ float r1 = 12345.12345678, r2 = 123.123456789 float r1 = 12345.12345678, r2 = 123.123456789; count = printf(r1 = %fnr2 = %fn,r1,r2)count = printf(r1 = %fnr2 = %fn,r1,r2); printf(count=%dn,count)printf(count=%dn,count);/* 輸出printf()函
19、數(shù)的返回值 */ 程序輸出:程序輸出: r1 = 12345.123047r1 = 12345.123047 r2 = 123.123459 r2 = 123.123459 count=34 count=34 14 scanf() scanf()函數(shù)也具有返回值,所不同的是,函數(shù)也具有返回值,所不同的是,scanf()scanf()函數(shù)執(zhí)行成函數(shù)執(zhí)行成功時的返回值是成功讀取的變量數(shù);如果第一個輸入項讀入就出錯,功時的返回值是成功讀取的變量數(shù);如果第一個輸入項讀入就出錯,則返回則返回0 0。 /* 本程序測試scanf()函數(shù)的返回值 */ #include #include int main(
20、) int main() int count, a int count, a,b b,c c; count = scanf(“%d,%d,%d”, &a, &b, &c)count = scanf(“%d,%d,%d”, &a, &b, &c); printf(a=%d,b=%d,c=%dprintf(a=%d,b=%d,c=%dttcount=%dn,a, b, ccount=%dn,a, b, c,count)count); 執(zhí)行上述程序,如果輸入為: 123,1234,12345 則輸出結(jié)果為: a=123,b=1234,c=12345 c
21、ount=3153.4.2 printf()3.4.2 printf()函數(shù)的函數(shù)的p p格式符的應(yīng)用格式符的應(yīng)用 在在printf()printf()函數(shù)中,函數(shù)中,p p格式符用來輸出指針的值,即指針?biāo)父袷椒脕磔敵鲋羔樀闹?,即指針?biāo)笇ο蟮氖椎刂?。利用對象的首地址。利用p p格式符的這一特性,我們可以了解變量的空格式符的這一特性,我們可以了解變量的空間分配情況。下面來看一個例子。間分配情況。下面來看一個例子。 /* 本程序測試變量的空間分配情況 */ #include #include int main() int main() int i int i,j j,k k; printf(
22、&i=%p,&j=%p,&k=%pn, &i,&j,&k)printf(&i=%p,&j=%p,&k=%pn, &i,&j,&k); 執(zhí)行后的輸出為(不同的系統(tǒng)環(huán)境可能輸出值不同,下面是Turbo 2.0的一種輸出): &i=650B:0FD6,&j=650B:0FD8,&k=650B:0FDA&i=650B:0FD6,&j=650B:0FD8,&k=650B:0FDA16 3.4.3 scanf() 3.4.3 scanf()函數(shù)的函數(shù)的“%”%”格
23、式應(yīng)用問題格式應(yīng)用問題 /* 用“%”格式接收指定范圍的字符 */ #include #include int main() int main() int int * *ptrptr; /* 定義一個指針 */ scanf(“%abcd”, ptr) scanf(“%abcd”, ptr); printf(“ptr=%sn”,ptr)printf(“ptr=%sn”,ptr); 設(shè)輸入為: dabcaaagadedabcaaagade 程序輸出為: ptr=dabcaaaptr=dabcaaa17 /* 用“%”格式接收指定范圍的字符 */ #include #include int main
24、() int main() int int * *ptrptr; /* 定義一個指針 */ scanf(“% scanf(“% bcd,”, ptr)bcd,”, ptr); printf(“%sn”,ptr)printf(“%sn”,ptr); 設(shè)輸入為: How are you,John!How are you,John! 程序輸出為: How are youHow are you 注注: :這是由于逗號作為不可接受字符這是由于逗號作為不可接受字符, ,而作為而作為字符串的定界符字符串的定界符. .18/ /* * 本程序可接收任意字符串的輸入本程序可接收任意字符串的輸入 * */ / #
25、include #include int main() int main() int int * *ptrptr; / /* * 定義一個指針定義一個指針 * */ / scanf(“%n”, ptr) scanf(“%n”, ptr); printf(“ptr=%sn”,ptr)printf(“ptr=%sn”,ptr); 設(shè)輸入為:設(shè)輸入為: How are you!How are you! 程序輸出為程序輸出為: : How are you!How are you!19 3.4.4 scanf() 3.4.4 scanf()函數(shù)應(yīng)用中兩個最常見的問題函數(shù)應(yīng)用中兩個最常見的問題 1. 1.空白符問題空白符問題 /* 本程序測試格式轉(zhuǎn)換說明
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息技術(shù)2.0體育教研組研修計劃
- 出納個人工作總結(jié)模板
- 關(guān)于電子廠實習(xí)日記6篇
- 書法培訓(xùn)學(xué)校校長開學(xué)精彩致辭范文(9篇)
- 藝術(shù)館內(nèi)部裝修施工合同
- 昆明市房產(chǎn)過戶合同解析
- 印刷生產(chǎn)線施工合同
- 人工智能研究員聘任合同
- 商務(wù)辦公宿舍建造項目合同
- 汽車保修合同模板
- 《耳穴療法治療失眠》課件
- 詢盤分析及回復(fù)
- 氯化工藝安全培訓(xùn)課件
- 指導(dǎo)巡察工作精細科學(xué)
- 企業(yè)法律知識培訓(xùn)消費者權(quán)益保護實務(wù)
- 快樂讀書吧-讀后分享課:《十萬個為什么》教學(xué)案列
- 2024年 貴州茅臺酒股份有限公司招聘筆試參考題庫含答案解析
- 河上建壩糾紛可行性方案
- 第五單元學(xué)雷鋒在行動(教案)全國通用五年級下冊綜合實踐活動
- 2024年華融實業(yè)投資管理有限公司招聘筆試參考題庫含答案解析
- 2024年1月普通高等學(xué)校招生全國統(tǒng)一考試適應(yīng)性測試(九省聯(lián)考)歷史試題(適用地區(qū):貴州)含解析
評論
0/150
提交評論