版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章標(biāo)準(zhǔn)輸入與輸出3.1概述3.2字符輸入輸出函數(shù)3.3格式化輸入和輸出函數(shù)
3.4輸入和輸出函數(shù)的討論1C語言程序設(shè)計---第3章通過終端輸入(如鍵盤、鼠標(biāo)等),也稱為標(biāo)準(zhǔn)輸入(standardinput),直接向終端輸出(如顯示器、打印機(jī)等),也稱為標(biāo)準(zhǔn)輸出(standardoutput)。3.1概述
C語言本身沒有提供輸入輸出語句,C語言中的所有I/O操作都是通過函數(shù)調(diào)用來實(shí)現(xiàn),而這些并非C語言一部分的輸入輸出函數(shù)均以目標(biāo)級程序的方式提供,并存放在一個C標(biāo)準(zhǔn)函數(shù)庫中。每一個標(biāo)準(zhǔn)庫都有一個相應(yīng)的頭文件,該頭文件包含了該庫中所有函數(shù)的函數(shù)原型及其相關(guān)信息。在調(diào)用這些庫函數(shù)時,要用預(yù)處理命令“#include”將有關(guān)的“頭文件”包括到用戶源程序中。標(biāo)準(zhǔn)輸入輸出庫函數(shù)對應(yīng)的頭文件是“stdio.h”。stdio是standardinput&output的縮寫。因此,讀者在調(diào)用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時,你的源程序開頭應(yīng)該有如下編譯預(yù)處理命令:
#include<stdio.h>
或
#include"stdio.h"2C語言程序設(shè)計---第3章3.2字符輸入輸出函數(shù)3.2.1字符輸出函數(shù)putchar()
putchar()函數(shù)是向屏幕一個字符,其調(diào)用格式為:
putchar(ch);
其中ch為一個字符變量、字符常量或整型常量。
/*本程序測試多種類型數(shù)據(jù)作putchar()函數(shù)參數(shù)的輸出情況*/#include<stdio.h>main(){charc=’A’;/*定義字符變量并初始化*/
putchar(c);
/*輸出變量C的值即字符A*/
putchar(’A’);/*輸出字符A*/putchar(’\x41’);/*輸出字符A,它以轉(zhuǎn)義字符表示,十六進(jìn)制*/
putchar(0x41);/*直接用ASCII碼值輸出字符A*/
putchar(’\101’);/*輸出字符A,它以轉(zhuǎn)義字符表示,八進(jìn)制*/}3C語言程序設(shè)計---第3章3.2.2帶緩沖區(qū)的字符輸入函數(shù)getchar()
getchar()函數(shù)的功能是從標(biāo)準(zhǔn)輸入文件(通常是鍵盤,亦指磁盤文件)讀取一字節(jié)代碼(即一個字符),并回顯。所謂回顯,是指輸入一個字符的同時又在屏幕上顯示出該字符。這是標(biāo)準(zhǔn)C提供的字符輸入函數(shù),因此也是最常用的字符輸入(尤其是鍵盤輸入)函數(shù)。鍵盤緩沖區(qū)(實(shí)際上應(yīng)該稱作輸入流即stdin
流)。所謂鍵盤緩沖區(qū),是指在內(nèi)存開辟的一片臨時單元,用來暫時存放從鍵盤輸入的字符。getchar()函數(shù)是帶鍵盤緩沖區(qū)的輸入函數(shù),是指當(dāng)從鍵盤輸入字符時,這些字符先存放在鍵盤緩沖區(qū),如果不敲回車鍵,getchar()函數(shù)并沒有真正被執(zhí)行(即所謂被激活);僅當(dāng)回車鍵也被送入鍵盤緩沖區(qū)后,getchar()函數(shù)才從鍵盤緩沖區(qū)中讀取一個字符。4C語言程序設(shè)計---第3章強(qiáng)調(diào)以下三點(diǎn):
(1)調(diào)用getchar()函數(shù)輸入字符時,必須用另一個變量(字符變量或整型變量)接收輸入的字符。例如:
ch=getchar();
(2)調(diào)用getchar()函數(shù)輸入字符時,僅當(dāng)敲入回車鍵后,函數(shù)才被激活。
(3)調(diào)用該函數(shù)時,輸入的每一個字符,包括空白符(即空格、制表符和回車符),都被送存到鍵盤緩沖區(qū)。5C語言程序設(shè)計---第3章
/*本程序調(diào)用getchar()函數(shù)輸入一個字符*/#include<stdio.h>main(){charc;
/*定義字符變量*/c=getchar();
/*接收鍵盤輸入的一個字符*/
putchar(c);/*輸出該字符*/
putchar(’\n’);
}6C語言程序設(shè)計---第3章
3.2.3不帶緩沖區(qū)的字符輸入函數(shù)getch()和getche()這是某些編譯器,譬如TurboC新增加的兩個字符輸入函數(shù),這兩個函數(shù)都是從鍵盤上讀入一個字符。兩者的區(qū)別是:getch()函數(shù)將讀入的字符不回顯在屏幕上,而getche()函數(shù)卻將讀入的字符回顯到顯示屏幕上。7C語言程序設(shè)計---第3章
/*本程序調(diào)用getchar()函數(shù)輸入一個字符*/#include<stdio.h>main(){charc,ch;
c=getch();/*從鍵盤上讀一字符不回顯送給變量c*/
putchar(c);/*輸出該字符*/
ch=getche();/*從鍵盤讀一字符送給變量ch并回顯*/
putchar(ch);/*輸出該字符*/
}8C語言程序設(shè)計---第3章3.3格式化輸入和輸出函數(shù)3.3.1printf()函數(shù)
用于按指定格式向標(biāo)準(zhǔn)輸出設(shè)備(屏幕)輸出。有兩種形式:
printf("字符串");
例如,下面的語句:
printf("Howareyou!\n");是在屏幕上輸出這樣一行:
Howareyou!這種形式的輸出并沒有指定輸出格式。9C語言程序設(shè)計---第3章另一種形式是:printf("<格式控制串>",<參數(shù)表>)
“格式控制串”是由0個或多個格式轉(zhuǎn)換說明組成的一個字符串序列。格式轉(zhuǎn)換說明的一般形式為:
%[flag][[width][.prec]][[h][l][L]]輸出格式符格式修飾符(見表3-2)
見表3-1
printf(“%d”,a);
printf("%d%f",a,x);
printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);
printf(“a=%-d,x=%+8.2f,x+y=%Lf\n",a,x,x+y);
左對齊
正數(shù)也要加正號輸出共占8位,其中小數(shù)占兩位輸出為longdouble型10C語言程序設(shè)計---第3章3.3.2scanf()函數(shù)
scanf()函數(shù)的一般形式為:
int
scanf("<格式控制串>",<地址列表>)
“格式控制串”是由0個或多個格式轉(zhuǎn)換說明組成的一個字符串序列。格式轉(zhuǎn)換說明的一般形式為:
%[*][width][h/l/L]輸入格式符
格式修飾符(見表3-4)
見表3-3格式轉(zhuǎn)換說明的作用是引導(dǎo)對下一輸入項(xiàng)進(jìn)行轉(zhuǎn)換。
“地址列表”中給出一個或多個輸入項(xiàng),輸入項(xiàng)之間用逗號分隔。從概念上講,輸入項(xiàng)的表示形式是指針,指向存儲輸入數(shù)據(jù)的變量。因此,輸入項(xiàng)必須指明變量的地址。C語言提供了一個取變量地址的運(yùn)算符“&”,只要將它作用在變量上,就能得到該變量的地址。例如,&a,&b分別表示變量a和變量b的地址。11C語言程序設(shè)計---第3章例如,若要為int變量a和b從鍵盤輸入數(shù)據(jù),如果寫作:
scanf("%d%d",a,b);是不正確的??捎萌缦抡Z句實(shí)現(xiàn):
scanf("%d%d",&a,&b);如果將上述語句應(yīng)改為:
scanf("%d,%d",&a,&b);即在兩個格式轉(zhuǎn)換說明之間插入一個逗號,輸入數(shù)據(jù)時也必須輸入一個逗號,如:
123,4567↙
要注意的是,不要輕易將“c”格式與其它格式混在一起用,以免出錯。例如,設(shè)a為int型變量,ch是char型變量,對于語句:
scanf("%d%c",&a,&ch);若輸入為
29□A/*□表示空格符*/其結(jié)果是將數(shù)值29送a,而將一個空格字符送ch。
12C語言程序設(shè)計---第3章
3.4關(guān)于格式化輸入和輸出函數(shù)的進(jìn)一步討論
3.4.1printf()和scanf()函數(shù)的返回值問題若成功,printf()函數(shù)返回輸出的字符個數(shù),出錯時返回負(fù)數(shù)。
/*本程序測試printf()函數(shù)的返回值*/#include<stdio.h>main(){
intcount;/*定義count,用來接收返回值*/floatr1=12345.12345678,r2=123.123456789;
count=printf("r1=%f\nr2=%f\n",r1,r2);
printf("count=%d\n",count);/*輸出printf()函數(shù)的返回值*/}
程序輸出:
r1=12345.123047r2=123.123459count=34
13C語言程序設(shè)計---第3章
scanf()函數(shù)也具有返回值,所不同的是,scanf()函數(shù)執(zhí)行成功時的返回值是成功讀取的變量數(shù);如果第一個輸入項(xiàng)讀入就出錯,則返回0。
/*本程序測試scanf()函數(shù)的返回值*/#include<stdio.h>
intmain(){
intcount,a,b,c;
count=scanf(“%d,%d,%d”,&a,&b,&c);
printf("a=%d,b=%d,c=%d\tcount=%d\n",a,b,c,count);
}
執(zhí)行上述程序,如果輸入為:
123,1234,12345↙
則輸出結(jié)果為:
a=123,b=1234,c=12345count=314C語言程序設(shè)計---第3章3.4.2printf()函數(shù)的p格式符的應(yīng)用在printf()函數(shù)中,p格式符用來輸出指針的值,即指針?biāo)笇ο蟮氖椎刂?。利用p格式符的這一特性,我們可以了解變量的空間分配情況。下面來看一個例子。
/*本程序測試變量的空間分配情況*/#include<stdio.h>
intmain(){
inti,j,k;
printf("&i=%p,&j=%p,&k=%p\n",&i,&j,&k);
}
執(zhí)行后的輸出為(不同的系統(tǒng)環(huán)境可能輸出值不同,下面是Turbo2.0的一種輸出):
&i=650B:0FD6,&j=650B:0FD8,&k=650B:0FDA15C語言程序設(shè)計---第3章
3.4.3scanf()函數(shù)的“%[]”格式應(yīng)用問題
/*用“%[]”格式接收指定范圍的字符*/#include<stdio.h>
intmain(){
int*ptr;/*定義一個指針*/
scanf(“%[abcd]”,ptr);
printf(“ptr=%s\n”,ptr);
}
設(shè)輸入為:
dabcaaagade↙
程序輸出為:
ptr=dabcaaa16C語言程序設(shè)計---第3章
/*用“%[]”格式接收指定范圍的字符*/#include<stdio.h>
intmain(){
int*ptr;/*定義一個指針*/
scanf(“%[^bcd,]”,ptr);
printf(“%s\n”,ptr);
}
設(shè)輸入為:
Howareyou,John!↙
程序輸出為:
Howareyou
注:這是由于逗號作為不可接受字符,而作為字符串的定界符.17C語言程序設(shè)計---第3章/*本程序可接收任意字符串的輸入*/
#include<stdio.h>
intmain(){
int*ptr;/*定義一個指針*/
scanf(“%[^\n]”,ptr);
printf(“ptr=%s\n”,ptr);
}
設(shè)輸入為:
Howareyou!↙
程序輸出為:
Howareyou!18C語言程序設(shè)計---第3章
3.4.4scanf()函數(shù)應(yīng)用中兩個最常見的問題
1.空白符問題
/*本程序測試格式轉(zhuǎn)換說明"%d\n"的應(yīng)用情況*/
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 錦州醫(yī)科大學(xué)醫(yī)療學(xué)院《代謝控制發(fā)酵》2023-2024學(xué)年第一學(xué)期期末試卷
- 新蘇教版一年級下冊數(shù)學(xué)第1單元第5課時《有關(guān)6、5、4、3、2的加減法》作業(yè)
- 懷化職業(yè)技術(shù)學(xué)院《特種膠黏劑》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北美術(shù)學(xué)院《圖書情報基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶三峽學(xué)院《數(shù)字信號處理俄》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶財經(jīng)學(xué)院《工程制圖與化工CAD》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江郵電職業(yè)技術(shù)學(xué)院《機(jī)器人理論及技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江工業(yè)大學(xué)《儀器分析專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 地暖電磁閥工作原理
- 鄭州智能科技職業(yè)學(xué)院《水利水電工程概預(yù)算》2023-2024學(xué)年第一學(xué)期期末試卷
- 人教版初中英語八年級下冊 單詞默寫表 漢譯英
- GB/T 304.9-2008關(guān)節(jié)軸承通用技術(shù)規(guī)則
- GB/T 29353-2012養(yǎng)老機(jī)構(gòu)基本規(guī)范
- 2205雙相不銹鋼的焊接工藝
- 啤酒廠糖化車間熱量衡算
- 英文標(biāo)點(diǎn)符號用法(句號分號冒號問號感嘆號)(課堂)課件
- 22部能夠療傷的身心靈療愈電影
- 領(lǐng)導(dǎo)干部有效授權(quán)的技巧與藝術(shù)課件
- DB37-T 1915-2020 安全生產(chǎn)培訓(xùn)質(zhì)量控制規(guī)范-(高清版)
- 陜西省商洛市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 實(shí)習(xí)生請假條
評論
0/150
提交評論