C++語言程序設(shè)計 輸入輸出流_第1頁
C++語言程序設(shè)計 輸入輸出流_第2頁
C++語言程序設(shè)計 輸入輸出流_第3頁
C++語言程序設(shè)計 輸入輸出流_第4頁
C++語言程序設(shè)計 輸入輸出流_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++語言程序設(shè)計輸入輸出流2I/O流的概念當程序與外界環(huán)境進行信息交換時,存在著兩個對象,一個是程序中的對象,另一個是文件對象。流是一種抽象,它負責在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費者之間建立聯(lián)系,并管理數(shù)據(jù)的流動。程序建立一個流對象,并指定這個流對象與某個文件對象建立連接,程序操作流對象,流對象通過文件系統(tǒng)對所連接的文件對象產(chǎn)生作用。讀操作在流數(shù)據(jù)抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。3C++的流C++的流——

表示一種數(shù)據(jù)傳遞操作。它是與某一I/O設(shè)備相聯(lián)系的(例如鍵盤、顯示器、磁盤等);通過使用流類中定義的方法,就可以實現(xiàn)利用這些設(shè)備完成輸入輸出操作.與輸入設(shè)備(如鍵盤)相聯(lián)系的流稱為輸入流,例如標準輸入流cin;與輸出設(shè)備(如顯示器)相聯(lián)系的流稱為輸出流,例如標準輸出流cout;與輸入輸出設(shè)備(如磁盤)相聯(lián)系的流稱為輸入輸出流4流類地繼承體系iosostreamistreamclogfstreamiostreamcerrcinofstreamifstreamcoutiostream.hfstream.h5預定義流預先定義的輸出流對象:cout標準輸出cerr標準錯誤輸出,沒有緩沖,發(fā)送給它的內(nèi)容立即被輸出。clog類似于cerr,但是有緩沖,緩沖區(qū)滿時被輸出。預先定義的輸入流對象:cin標準輸入要使用這四個對象,必須包含<iostream>文件6輸入/輸出成員函數(shù)intistream::get();作用:函數(shù)值返回流中一個字符的ASCII碼值例:voidmain(){charch;

while(

(ch=cin.get())

!=EOF)

cout<<“ch:“<<ch<<endl;}問題:get()的返回值不是iostream對象,不能連續(xù)輸入7istream&istream::get(char&c);作用:從流中提取一個字符,并存入實參變量例:voidmain(){charch1,ch2,ch3; cout<<“Inputthreeletters:”;

cin.get(ch1).get(ch2).get(ch3);}可以連續(xù)輸入8istream&istream::get(char*,int,char=‘\n’);istream&istream::getline(char*,int,char=‘\n’);作用:從文本中提取指定個數(shù)的字符,并在串數(shù)組末添加一個空字符第一個參數(shù)指向接受字符數(shù)據(jù)的字符數(shù)組第二個參數(shù)指定字符數(shù)組最多可容納的字符個數(shù)第三個參數(shù)用于指定一個終止符,默認為換行符。操作遇到終止符或提取到規(guī)定個數(shù)字符時,提取終止注意:get(...)不從流中提取終止字符,終止字符仍在輸入流中

getline(...)從流中提取終止字符,但終止字符被丟棄兩個提取操作成員函數(shù)都可以連續(xù)輸入9例20-1比較cin和cin.get的輸入#include<iostream>usingnamespacestd;intmain(){ constintSIZE=80; charch1,ch2,ch3,buffer1[SIZE],buffer2[SIZE]; cout<<"Enterasentence:\n"; cin>>buffer1; cout<<"Thestringreadwithcinis:\n"<<buffer1; ch1=cin.get(); ch2=cin.get(); cout<<"\nTheresultofcin.get()is:\n"<<ch1<<ch2; cin.get(ch3); cout<<"\nTheresultofcin.get(ch3)is:\n"<<ch3; cin.get(buffer2,SIZE); cout<<"\nThestringreadwithcin.get(buffer2,SIZE)is:\n"<<buffer2<<endl; return0;}10ostream&ostream::put(charc);

作用:輸出參數(shù)c的字符例:voidmain(){

char

ch=

‘A’; cout<<ch<<endl; cout.put(ch);}輸出結(jié)果:

A A例:voidmain(){

int

ch=‘A’; cout<<ch<<endl; cout.put(ch);}輸出結(jié)果:

65 A11格式化輸入輸出C++提供了兩種輸入輸出格式控制的方法利用ios類中有關(guān)格式控制的成員函數(shù)使用稱為流操縱符的特殊函數(shù)進行格式控制12流格式狀態(tài)標志C++在類ios_base中提供格式化輸入輸出。這些格式是對所有文本方式的輸入輸出流均適用。流格式狀態(tài)標志定義為公有的無名的枚舉類型P319表該枚舉量說明中每一個枚舉量實際對應(yīng)兩字節(jié)數(shù)據(jù)(16位)中的一個位,所以可以同時采用幾個格式控制,只要把對應(yīng)位置1即可,這樣既方便又節(jié)約內(nèi)存。取多種控制時,用或“|”運算符來合成,合成為一個長整型數(shù)13使用流對象的成員函數(shù)控制I/O格式設(shè)置標志字的成員函數(shù)longflags():返回流格式標志的當前設(shè)置;例:cout.flags(ios::scientific|ios::showpos);longsetf():設(shè)置流格式標志例:cout.setf(ios::uppercase|ios::scientific);longunsetf(long):清除流格式標志控制輸出格式和成員函數(shù)設(shè)置域?qū)挘篿ntwidth()填充字符:intfill()設(shè)置精度:intprecision()14例20-2浮點數(shù)輸出-使用流對象的成員函數(shù)#include<iostream>usingnamespacestd;intmain(){ doublefnum=31.415926535; cout<<"默認域?qū)挒?"<<cout.width()<<"位"<<'\n'; cout<<"默認精度為:"<<cout.precision()<<"位"<<'\n'; cout<<"默認表達方式:"<<fnum<<'\n'; //按值大小,自動決定定點還是科學數(shù)方式

cout.setf(ios::scientific); cout<<"科學數(shù)表達方式:"<<fnum<<'\n'; cout.setf(ios::fixed);//設(shè)為定點,取消科學數(shù)方式

cout<<"定點表達方式:"<<fnum<<'\n'; cout.precision(9);//精度9位指小數(shù)點后9位

cout.setf(ios::scientific,ios::floatfield); cout<<"9位科學數(shù)表達方式"<<fnum<<'\n'; return0;}15使用流操縱符控制I/O格式程序中要使用C++提供的預定義流操縱符,通常都需包含進頭文件iostream和iomanipP323表例20-3使用流操縱符16#include<iostream>#include<iomanip>usingnamespacestd;intmain(){ cout<<setw(10)<<123<<567<<endl; cout<<123<<setiosflags(ios::scientific)<<setw(20)<<123.456789<<endl; cout<<resetiosflags(ios::scientific)<<setprecision(4)<<123.456789<<endl; cout<<left<<setfill('#')<<setw(8)<<123<<endl; cout<<right<<setfill('$')<<setw(8)<<456<<endl; return0;}17注意使用cout.width(n)和setw(n)設(shè)置輸出寬度時,僅對其后緊接它的輸出數(shù)據(jù)起作用;如果數(shù)據(jù)的長度超過指定寬度,忽略設(shè)置,按數(shù)據(jù)實際長度顯示其他格式控制對其后的所有輸出操作都有效使用流操縱符更加簡潔18文件當打開一個文件時,該文件就和某個流關(guān)聯(lián)起來了。對文件進行讀寫實際上受到一個文件定位指針(filepositionpointer)的控制。根據(jù)文件內(nèi)容的組織形式,C++將(磁盤)文件分為文本文件和二進制文件兩類:文本文件的每個字節(jié)存放的是一個ASCII碼,代表一個字符二進制文件則是把內(nèi)存中的數(shù)據(jù)按其原始形式(二進制代碼形式)直接寫到磁盤文件中存放起來C++的程序要進行文件操作必須包含頭文件fstream.hC++中進行文件操作的基本步驟:①打開文件②對文件輸入/輸出③關(guān)閉文件。19文件的打開與關(guān)閉1、打開文件步驟:①創(chuàng)建流對象②使用該對象的方法open()打開指定的文件。(①②合在一起時可以省略函數(shù)名open).根據(jù)①中創(chuàng)建不同的文件流類的對象,打開文件的具體方法可分為兩種: (1)通過創(chuàng)建fstream類對象打開文件形式:fstream對象名; 對象名.open(文件名字符串,訪問方式);20其中,文件名字符串指打開文件的全文(若非當前目錄下,還需寫出路徑名);訪問方式見教材P328表。注意:這些訪問方式也可以通過或運算符“|”

逐個連接起來共同使用.(2)通過創(chuàng)建ifstream類或ofstream類對象打開文件

讀文件的方式:ifstream對象名; 對象名.open(文件名字符串);

寫文件的方式:ofstream對象名; 對象名.open(文件名字符串);21打開文件也應(yīng)該判斷是否成功,若成功,文件流對象值為非零值,不成功為0(NULL),文件流對象值物理上就是指它的地址。因此打開一個文件完整的程序為:fstreamiofile(”myfile.txt”,ios::in|ios::out);if(!iofile){

cout<<”不能打開文件:”<<”myfile.txt”<<endl; return-1;}//失敗退回 222、關(guān)閉文件打開的文件使用完畢后要及時關(guān)閉,這樣既可以保護文件,又可以及時釋放內(nèi)存空間,提高程序運行效率.關(guān)閉文件要使用成員函數(shù)close(),格式:

文件流對象名

.close();其中,文件流對象名是與要關(guān)閉的文件相關(guān)聯(lián)的文件流對象的名稱。例:

ifstreaminfile;infile.open(“D:\\

f1.txt”);

……infile.close();23文件的輸入與輸出1、文本文件的輸入(讀)/輸出(寫)對已正確打開的某文本文件,可以通過對與其相關(guān)聯(lián)的流類對象的如下操作進行讀寫使用提取、插入操作

使用成員函數(shù)get(含getline)和put

24例20-4使用輸入、輸出運算符讀寫文本文件#include<iostream>#include<fstream>usingnamespacestd;intmain(){ ofstreamoutfile; outfile.open("abc.txt");//以寫的方式打開文件abc.txt if(!outfile) { cout<<"abc.txtcan'topen"<<endl; return-1;//打開失敗,結(jié)束程序

}25

charch='a'; while(ch<='z') { outfile<<ch; ch++; } outfile.close(); fstreaminfile("abc.txt",ios::in);//以讀的方式打開文件

溫馨提示

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

評論

0/150

提交評論