版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章輸入輸出流一、流類簡(jiǎn)介C++中凡是數(shù)據(jù)從一個(gè)地方傳輸?shù)搅硪粋€(gè)地方的操作都是流的操作。因此,一般意義下的讀操作在流數(shù)據(jù)抽象中被稱為(從流中)“提取”,寫操作被稱為(向流中)“插入”。在C++中,輸入輸出的完成是通過(guò)流。圖7-1中的箭頭代表派生關(guān)系。ios是抽象基類,提供輸入/輸出所需的公共操作,它派生出兩個(gè)類istream和ostream。為了避免多重繼承的二義性,從ios派生istream和ostream時(shí),均使用了virtual關(guān)鍵字(虛繼承)。istream類提供了流的大部分輸入操作,對(duì)系統(tǒng)預(yù)定義的所有輸入流重載提取運(yùn)算符“>>”。ostream類對(duì)系統(tǒng)預(yù)定義的所有輸出流重載插入運(yùn)算符“<<”。由istream和ostream又共同派生了iostream類。C++的iostream類庫(kù)提供了數(shù)百種I/O功能,iostream類庫(kù)的接口部分包含在幾個(gè)頭文件中。常見的頭文件有以下3個(gè):(1)iostream頭文件iostream包含操作所有輸入/輸出流所需的基本信息,因此大多數(shù)C++程序都應(yīng)包含這個(gè)頭文件。該文件含有4個(gè)標(biāo)準(zhǔn)流對(duì)象,提供了無(wú)格式化和格式化的I/O功能。(2)iomanip例如:setw()輸入或輸出的長(zhǎng)度,setprecision()浮點(diǎn)數(shù)精度設(shè)置,setfill()指定長(zhǎng)度的輸出不足補(bǔ)空格,setbase()設(shè)置多少進(jìn)制輸出等。頭文件iomanip包含格式化I/O的帶參數(shù)流操縱符,可用于指定數(shù)據(jù)輸入/輸出的格式。(3)fstream頭文件fstream包含處理文件的有關(guān)信息,提供建立文件、讀/寫文件的各種操作接口。真題下列流類中,可以用于輸入/輸出的是(B)。A:ifstreamB:iostreamC:istreamD:ofstream下列選項(xiàng)中,不能作為輸出流的對(duì)象是(C)A:文件B:內(nèi)存C:鍵盤D:顯示器下列選項(xiàng)中,不是C++中的標(biāo)準(zhǔn)輸入輸出的是(A)A:stdinB:coutC:clogD:cerr在C++中,使用流進(jìn)行輸入輸出,其中用于屏幕輸入(A)A:cinB:cerrC:coutD:clogC++語(yǔ)言的跳轉(zhuǎn)語(yǔ)句中,break和continue說(shuō)法正確的是(B)A:break語(yǔ)句只應(yīng)用于循環(huán)體中B:continue語(yǔ)句只應(yīng)用于循環(huán)體中C:break是無(wú)條件跳轉(zhuǎn)語(yǔ)句,continue不是D:break和continue的跳轉(zhuǎn)范圍不夠明確,容易產(chǎn)生問(wèn)題二、標(biāo)準(zhǔn)流對(duì)象C++在頭文件iostream中為用戶預(yù)定義了4個(gè)標(biāo)準(zhǔn)流對(duì)象,分別是:cin
標(biāo)準(zhǔn)輸入流
與標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)相關(guān)聯(lián),用于讀取數(shù)據(jù),可以被重定向?yàn)閺奈募凶x取數(shù)據(jù)cout
標(biāo)準(zhǔn)輸出流
與標(biāo)準(zhǔn)輸出設(shè)備(顯示器)相關(guān)聯(lián),用于輸出數(shù)據(jù),可以被重定向?yàn)橄蛭募飳懭霐?shù)據(jù)cerr
非緩沖錯(cuò)誤輸出流
與標(biāo)準(zhǔn)錯(cuò)誤信息輸出設(shè)備(顯示器)相關(guān)聯(lián)(非緩沖),用于輸出出錯(cuò)信息,不能被重定向。clog
緩沖錯(cuò)誤輸出流
與標(biāo)準(zhǔn)錯(cuò)誤信息輸出設(shè)備相關(guān)聯(lián)(緩沖),用于輸出出錯(cuò)信息,不能被重定向。在實(shí)際中,cin常用于從鍵盤輸入數(shù)據(jù),是流類istream的對(duì)象。cout常用于向屏幕輸出數(shù)據(jù),是流類ostream的對(duì)象?!境绦?-1】將標(biāo)準(zhǔn)輸出cout重定向到文件#include<iostream>usingnamespacestd;intmain(){
intx,y;
cin>>x>>y;
freopen("test.txt","w",stdout);//將標(biāo)準(zhǔn)輸出重定向到文件test.txt
函數(shù)freopen()的功能是將stream按mode指定的模式重定向到路徑path指向的文件。
if(y==0)//除數(shù)為0則輸出錯(cuò)誤信息
cerr<<"error."<<endl;
else
cout<<x<<"/"<<y<<"="<<x/y<<endl;
return0;}三、控制I/O格式C++進(jìn)行I/O格式控制的方式一般有使用流操縱符、設(shè)置標(biāo)志字和調(diào)用成員函數(shù)#include<iostream>#include<iomanip>usingnamespacestd;intmain(){
intn=65535,m=20;
//1)分別輸出一個(gè)整數(shù)的十進(jìn)制、十六進(jìn)制和八進(jìn)制表示
cout<<"1)"<<n<<"="<<hex<<n<<"="<<oct<<n<<endl;
//2)使用setbase分別輸出一個(gè)整數(shù)的十進(jìn)制、十六進(jìn)制和八進(jìn)制表示
cout<<"2)"<<setbase(10)<<m<<"="<<setbase(16)<<m<<"="<<setbase(8)<<m<<endl;
//3)使用showbase和setbase分別輸出一個(gè)整數(shù)的十進(jìn)制、十六進(jìn)制和八進(jìn)制表示
cout<<"3)"<<showbase;
//輸出表示數(shù)值進(jìn)制的前綴
cout<<setbase(10)<<m<<"="<<setbase(16)<<m<<"="<<setbase(8)<<m<<endl;
return0;}輸出:1)65535=ffff=1777772)20=14=243)20=0x14=024標(biāo)志字#include<iostream>#include<iomanip>usingnamespacestd;intmain(){
doublex=12.34;
cout<<"1)"<<setiosflags(ios::scientific|ios::showpos)<<x<<endl;
cout<<"2)"<<setiosflags(ios::fixed)<<x<<endl;
cout<<"3)"<<resetiosflags(ios::fixed)<<setiosflags(ios::scientific|ios::showpos)<<x<<endl;
cout<<"4)"<<resetiosflags(ios::showpos)<<x<<endl;//清除要輸出正號(hào)的標(biāo)志
return0;}輸出:1)+1.234000e+012)+0x1.8ae147ae147aep+33)+1.234000e+014)1.234000e+01真題下列選項(xiàng)中,用于清除基數(shù)格式位設(shè)置以十六進(jìn)制數(shù)輸出的語(yǔ)句是(B)A:cout<<setf(ios::dec,ios::basefield);B:cout<<setf(ios::hex,ios::basefield);C:cout<<setf(ios::oct,ios::basefield);D:cin>>setf(ios::hex,ios::basefield);在C++中使用流進(jìn)行輸入輸出,其中用于屏幕輸出的對(duì)象是(C)。A:cerrB:cinC:coutD:cfile下列格式控制符,既可以用于輸入,又可以用于輸出的是(D)A:setbaseB:setfillC:setprecisionD:setw用于標(biāo)識(shí)十六進(jìn)制前綴或后綴是(D)。A:無(wú)B:后綴L或eC:前綴零D:前綴0x解析:十六進(jìn)制常量——前綴0x十進(jìn)制常量——無(wú)前后綴八進(jìn)制常量——前綴0長(zhǎng)整型常量——后綴L或l在C++語(yǔ)言中,080是(D)。A:八進(jìn)制數(shù)B:十進(jìn)制數(shù)C:十六進(jìn)制數(shù)D:非法數(shù)下面的哪個(gè)保留字不能作為函數(shù)的返回類型(C)。A:voidB:intC:newD:long用于標(biāo)識(shí)十進(jìn)制常量的前綴或后綴是(A)。A:無(wú)前后綴B:后綴L或lC:前綴0D:前綴0x使用下列哪個(gè)格式控制符可設(shè)置轉(zhuǎn)換十六進(jìn)制為十進(jìn)制(A)。A:decB:octC:hexD:endl四、調(diào)用cout的成員函數(shù)#include<iostream>usingnamespacestd;intmain(){
doublevalues[]={1.23,20.3456,300.4567,4000.45678,50000.1234567};
cout.fill('*');//設(shè)置填充字符為星號(hào)*
for(inti=0;i<sizeof(values)/sizeof(double);i++)
{
cout<<"values["<<i<<"]=(";
cout.width(10);//設(shè)置輸出寬度
cout<<values[i]<<")"<<endl;
}
cout.fill('');//設(shè)置填充字符為空格
intj;
for(j=0;j<sizeof(values)/sizeof(double);j++){
cout<<"values["<<j<<"]=(";
cout.width(10);//設(shè)置輸出寬度
cout.precision(j+3);//設(shè)置保留有效數(shù)字
cout<<values[j]<<")"<<endl;
}
return0;}輸出:values[0]=(******1.23)values[1]=(***20.3456)values[2]=(***300.457)values[3]=(***4000.46)values[4]=(***50000.1)values[0]=(
1.23)values[1]=(
20.35)values[2]=(
300.46)values[3]=(
4000.46)values[4]=(
50000.12)#include<iostream>usingnamespacestd;intmain(){
charc='a',str[80]="0123456789abcdefghijklmn";
intx=65;
cout<<"cout.put('a'):";
cout.put('a');
cout<<"\ncout.put(c+25):";cout.put(c+25);
cout<<"\ncout.put(x):";cout.put(x);
cout<<"\ncout.write(str,20):";
cout.write(str,20);//將str的前20個(gè)字節(jié)寫入到輸出流中
return0;}輸出:cout.put('a'):acout.put(c+25):zcout.put(x):Acout.write(str,20):0123456789abcdefghij真題下列輸出字符'd'的方法中,錯(cuò)誤的是(A)A:cout<<put('d')B:cout<<'d'C:cout.put('d')D:chara='d';cout<<a;能夠把指定長(zhǎng)度的字節(jié)序列插入到輸出流中的函數(shù)名是(B)A:put
B:write
成員函數(shù)put()的功能是向輸出流中插入一個(gè)字符c,即字符插入。成員函數(shù)write()的功能是向輸出流中插入pch指向的一個(gè)長(zhǎng)度為nCount的字節(jié)序列,即數(shù)據(jù)塊插入C:coutD:printf五、調(diào)用cin的成員函數(shù)istream類提供了一些公有成員函數(shù),它們可以以不同的方式提取輸入流中的數(shù)據(jù)get()函數(shù)#include<iostream>usingnamespacestd;intmain(){
intn=0;
charch;
while((ch=cin.get())!=EOF){//當(dāng)文件沒(méi)有結(jié)束時(shí)繼續(xù)進(jìn)行循環(huán)
cout.put(ch);
n++;
}
cout<<"輸入字符共計(jì):"<<n<<endl;
return0;}在Windows環(huán)境下,當(dāng)進(jìn)行鍵盤輸入時(shí),在單獨(dú)的一行按〈Ctrl+Z〉組合鍵后再按〈Enter〉鍵就代表文件輸入結(jié)束。getline()函數(shù)getline()成員函數(shù)的原型如下:
從輸入流中讀取一行字符。istream&getline(char*buf,intbufSize);其功能是從輸入流中的當(dāng)前字符開始讀取bufSize-1個(gè)字符到緩沖區(qū)buf,或讀到’\n’為止(哪個(gè)條件先滿足即按哪個(gè)執(zhí)行)。函數(shù)會(huì)在buf中讀入數(shù)據(jù)的結(jié)尾自動(dòng)添加串結(jié)束標(biāo)記'\0’。istream&getline(char*buf,intbufSize,chardelim);其功能是從輸入流中的當(dāng)前字符開始讀取bufSize-1個(gè)字符到緩沖區(qū)buf,或讀到字符delim為止(哪個(gè)條件先滿足即按哪個(gè)執(zhí)行)。函數(shù)會(huì)在buf中讀入數(shù)據(jù)的結(jié)尾自動(dòng)添加'\0'。兩者的區(qū)別在于,前者是讀到'\n'。為止,后者是讀到指定字符delim為止。字符'\n'或delim都不會(huì)被存入buf中,但會(huì)從輸入流中取走。函數(shù)getline()的返回值是函數(shù)所作用的對(duì)象的引用。如果輸入流中'\n'或delim之前的字符個(gè)數(shù)達(dá)到或超過(guò)bufSize,則會(huì)導(dǎo)致讀入操作出錯(cuò),其結(jié)果是:雖然本次讀入已經(jīng)完成,但是之后的讀入都會(huì)失敗#include<iostream>usingnamespacestd;intmain(){
char
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 毛皮制品制作工安全生產(chǎn)意識(shí)競(jìng)賽考核試卷含答案
- 船舶涂裝工安全生產(chǎn)基礎(chǔ)知識(shí)能力考核試卷含答案
- 模鍛工操作規(guī)程水平考核試卷含答案
- 2025年陶瓷片狀磷擴(kuò)散沅項(xiàng)目發(fā)展計(jì)劃
- 2025年特種裝備電纜項(xiàng)目發(fā)展計(jì)劃
- 2025年新能源掃路車項(xiàng)目發(fā)展計(jì)劃
- 2025年雄激素及同化激素合作協(xié)議書
- 2026年智能SOS緊急按鈕項(xiàng)目投資計(jì)劃書
- 消防保衛(wèi)方案及保證措施
- 選礦工年度考核試卷及答案
- 農(nóng)貿(mào)市場(chǎng)環(huán)境衛(wèi)生清潔行動(dòng)工作方案
- 淮安市2022-2023學(xué)年七年級(jí)上學(xué)期期末地理試題
- 2024屆高考語(yǔ)文二輪復(fù)習(xí)專題-文言文閱讀(上海專用)(解析版)
- 2024可打印的離婚協(xié)議書模板
- 2024屆廣東省深圳市中考物理模擬試卷(一模)(附答案)
- 《房顫的藥物治療》課件
- 診所污水處理管理制度
- 輔導(dǎo)員工作的職責(zé)與使命課件
- 新疆交通職業(yè)技術(shù)學(xué)院教師招聘考試歷年真題
- 吊籃租賃安拆分包合同
- (財(cái)務(wù)知識(shí))用友T財(cái)務(wù)通普版基本操作詳細(xì)資料
評(píng)論
0/150
提交評(píng)論