C++面向對象程序設計項目教程(項目六)_第1頁
C++面向對象程序設計項目教程(項目六)_第2頁
C++面向對象程序設計項目教程(項目六)_第3頁
C++面向對象程序設計項目教程(項目六)_第4頁
C++面向對象程序設計項目教程(項目六)_第5頁
已閱讀5頁,還剩84頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目六任務一

學習輸入/輸出的基礎知識任務二

學習文件流的相關知識輸入/輸出流

傳送數據的通道任務說明預備知識任務一

學習輸入/輸出的基礎知識在本任務中,我們先來學習輸入/輸出的基礎知識。一、關于輸入/輸出的基本概念二、標準輸入/輸出流一、關于輸入/輸出的基本概念C++不僅完全支持C的輸入/輸出系統,它還提供了自己的輸入/輸出系統,C++的輸入/輸出系統是以流的形式實現的。(一)流與緩沖區所謂流是指一連串連續不斷的數據集合。C++的輸入/輸出流是由若干字節組成的字節序列,從輸入設備流向內存的流為輸入流,從內存流向輸出設備的流為輸出流。流中的內容可以是ASCII字符、二進制形式的數據、圖形圖像、數字音頻視頻或其他形式的信息。系統在內存中為每一個數據信息流開辟一個內存緩沖區,用來存放流中的數據。在輸入時,從鍵盤輸入的數據先存放在鍵盤緩沖區中,按回車鍵后,數據從鍵盤緩沖區傳送到程序的輸入緩沖區,然后用提取運算符“>>”從輸入緩沖區內提取數據送給程序中的有關變量。在輸出時,先將數據送到程序的輸出緩沖區保存,直到緩沖區滿或遇到endl,用插入運算符“<<”將輸出緩沖區內全部數據送到顯示器顯示出來。數據流輸入/輸出過程如圖所示。(二)輸入/輸出流類C++編譯系統提供了用于輸入/輸出的iostream類庫,其中包含了許多用于輸入/輸出的類和流類,可以實現不同的功能。I/O類庫中的常用流類如表所示。ios是流類庫的虛基類,由它派生出istream類和ostream類,istream類和ostream類通過多重繼承又派生出iostream類。istream類提供輸入操作,ostream提供輸出操作,iostream類提供輸入和輸出操作。其繼承層次關系如圖所示。由于不同類的聲明被放在不同的頭文件中,因此,用戶在程序中使用這些類時,需要用#include命令將有關的頭文件包含進來。常用的頭文件有:iostream:包含對輸入/輸出流進行操作所需的基本信息,定義的類有ios,istream,ostream,iostream,istream_withassign,ostream_withassign,iostream_witassgin等。fstream:用于文件流的I/O操作。strstream:用于字符串流的I/O操作。stdio:定義輸入/輸出函數。iomanip:用于對I/O流進行格式控制。二、標準輸入/輸出流C++的輸入/輸出流庫中定義了4個標準流對象,如表所示。(一)標準輸入流對象cincin是istream的派生類istream_withassign的對象,它從標準輸入設備(鍵盤)獲取數據,稱為標準輸入流。程序中的變量通過流提取運算符“>>”從流中提取數據。對于cin,有以下幾點說明:(1)只有在按回車鍵后,當前行數據才會被送入鍵盤緩沖區,形成輸入流,提取運算符“>>”才會從中提取出數據。(2)使用“>>”提取數據時,系統會跳過輸入流中的空格、制表符、換行符等空白字符,然后讀入后面的與變量類型相對應的值。因此,給一組變量輸入值時,可用空格或換行符將鍵入的數據間隔開。例如:intx1;floatx2;cin>>x1>>x2;輸入數據時可采用如下幾種方式:2356.9(使用空格分隔數據)或23 56.9(使用制表符分隔數據)或2356.9(通過按回車鍵換行分隔數據)(3)輸入字符串(即類型為字符數組或字符指針變量)時,提取運算符“>>”將跳過空白符,然后讀入非空白字符,并且直到遇到另一空白符為止。讀取結束后,系統會在字符串的串尾放一個字符串結束標志’\0’。例如:charstr[50];char*str1=str;cin>>str1;當鍵入的字符串為:Areyouready?則str1中的字符串為“Are”,后面的內容均被忽略。(4)輸入數據時,系統除了會檢查空白符外,還會檢查輸入數據與變量的匹配情況。例如,對于語句:cin>>i>>x; //i為int型,x為float型若從鍵盤輸入:56.7832.8得到的結果為:i=56x=0.78(二)輸入流的成員函數在C++中,除了可以用cin流輸入標準類型的數據外,還可以用流的成員函數實現字符的輸入。下面簡單介紹幾個常用的成員函數。1.get函數get函數有3種形式:①不帶參數的get函數調用形式為:cin.get();其作用是從輸入流中提取一個字符(包括空白字符),并返回讀入的字符。當遇到輸入流中的文件結束符時,返回文件結束標志EOF(EOF是在iostream頭文件中定義的符號常量,一般用-1表示)。【例6-1】

不帶參數的get函數的應用示例。#include<iostream.h>voidmain(){charch;cout<<"EOF="<<EOF<<endl;cout<<"請輸入一串字符:";while((ch=cin.get())!=EOF) //循環讀取字符,直至換行后按【Ctrl+Z】組合鍵和回車鍵cout<<ch;}程序運行結果如圖所示。②有一個參數的get函數調用形式為:cin.get(ch);其作用是從輸入流中讀取一個字符,并存入字符變量ch。若讀取成功則返回非0值,否則返回0(遇到文件結束符EOF)。通常將其作為循環語句的判斷條件,例如:#include<iostream.h>voidmain(){charch;cout<<"請輸入一串字符:";while(cin.get(ch))//get函數作循環條件,若讀取成功則執行循環cout<<ch;}程序運行結果如圖所示。【例6-2】

有一個參數的get函數應用示例。將【例6-1】作如下修改。③有3個參數的get函數調用形式為:cin.get(字符數組(或字符指針),字符個數n,終止字符);其作用是從輸入流中讀取字符直到終止字符或者讀取n-1個字符,賦給指定字符數組(或字符指針指向的數組)。若讀取成功則返回非0值,否則返回0。例如:charch[14];cin.get(ch,5,'\n');此時若輸入abcdefg,則輸出結果為abcd。【例6-3】

有3個參數的get函數應用示例。#include<iostream.h>voidmain(){chararr[28];cout<<"請輸入一串字符:";cin.get(arr,18,'\n');//讀取輸入字符串的前17個字符,或者讀到結束標志cout<<arr<<endl;}程序運行結果如圖所示。2.getline函數調用getline函數的一般形式為:cin.getline(字符數組(或字符指針),字符個數n,終止標志字符)其作用與帶3個參數的get函數類似,即從輸入流中讀取字符直到終止字符或者讀取n-1個字符,賦給指定字符數組(或字符指針指向的數組)。【例6-4】getline函數應用示例。#include<iostream.h>voidmain(){charch0[30],ch1[30],ch2[40];cout<<"請輸入第一個字符串:";cin>>ch0; //第一個輸入語句cout<<"請輸入第二個字符串:";cin.getline(ch1,30); //第二個輸入語句cout<<"請輸入第三個字符串:";cin.getline(ch2,40,'*'); //第三個輸入語句cout<<"在屏幕上分別顯示輸入的三個字符串:"<<endl;cout<<"第一個:"<<ch0<<endl;cout<<"第二個:"<<ch1<<endl;cout<<"第三個:"<<ch2<<endl;cout<<"程序結束"<<endl;}程序運行結果如圖所示。(三)標準輸出流對象標準輸出流是從內存流向標準輸出設備(顯示器)的數據流。預定義標準輸出流對象主要包括cout、cerr和clog。1.cout流cout是ostream的派生類ostream_withassign的對象,它向標準輸出設備(終端顯示器)輸出數據,稱為標準輸出流。程序中的變量通過流插入運算符“<<”向cout流中順序插入數據。cout流在內存中開辟了一個輸出緩沖區,用于存放cout流中的數據。當向流中插入一個endl時,不論緩沖區是否已滿,均立即輸出流中所有數據,然后插入一個換行符,并清空緩沖區。如果插入一個換行符'\n',則只輸出并換行,不清空緩沖區。2.cerr流cerr向標準出錯設備(顯示器)輸出有關出錯信息,稱為標準出錯流。cerr與cout的作用和用法類似,不同的是cout流可以傳送到顯示器輸出,也可以被重定向輸出到磁盤文件,而cerr流只能在顯示器輸出。3.clog流clog流也是標準出錯流,其作用與cerr相同,都是向顯示器輸出出錯信息。它們的區別在于cerr沒有緩沖區,它直接向顯示器輸出信息,而clog先將信息放入緩沖區中,當緩沖區滿或遇到endl時再向顯示器輸出信息。【例6-5】cout、cerr和clog流應用示例。#include<iostream.h>#include<math.h>voidmain(){charch[10];inta,b;cin>>ch; //標準輸入流cout<<ch<<endl; //標準輸出流cin>>a>>b;if(a<b){cerr<<"cerr"<<endl; //標準出錯流cerrclog<<"clog"<<endl; //標準出錯流clog}}程序運行結果如圖所示。4.輸出流的成員函數在程序中通常使用cout和插入運算符“<<”實現輸出,有時需要輸出單個字符也可以使用流成員函數put()。其調用形式為:cout.put(參數);其中,參數可以是字符或字符的ASCII碼值。例如:cout.put('D');//在屏幕上輸出字母Dcout.put(68);//輸出ASCII碼為68的字符另外,也可以在一個語句中連續調用put函數,實現字符串的輸出。例如:cout.put('D').put('a').put('n').put('c').put('e');輸出結果為Dance。【例6-6】

輸出流的成員函數應用示例。#include<iostream.h>voidmain(){charch[5];cin>>ch; //輸入一個字符數組for(inti=4;i>=0;i--) //從最后一個字符開始輸出cout.put(ch[i]);}程序運行結果如圖所示。(四)輸入/輸出的格式控制在編寫程序時,有時會要求按照指定的格式輸入數據或輸出結果,此時可以使用格式控制符或流對象的有關格式控制的成員函數來實現。1.使用格式控制符進行格式控制C++中的格式控制符如表所示,它們可以被嵌入到輸入/輸出語句中控制輸入/輸出的格式。【例6-7】

格式控制符應用示例。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){inta;cout<<"請輸入一個整型數據:";cin>>a;cout<<"十六進制輸出:"<<hex<<a<<endl; //十六進制輸出cout<<"八進制輸出:"<<setbase(8)<<a<<endl; //八進制輸出cout<<setfill('*')<<setw(10)<<dec<<a<<endl; /*十進制輸出,寬度為10,不滿的填充字符**/cout<<setiosflags(ios::left)<<setw(10)<<a<<endl; //以后的數據輸出都會左對齊doubled;cout<<"請輸入一個浮點數據:";cin>>d;cout<<d<<endl; //默認輸出小數為6位cout<<setprecision(9); //設置浮點數位數為9位cout<<d<<endl; cout<<setiosflags(ios::scientific)<<d<<endl; //以科學計數法形式輸出cout<<resetiosflags(ios::scientific); //取消科學計數法格式設置cout<<d<<endl;char*str="WelcometoC++";cout<<setw(20)<<str<<endl;//輸出20位,左對齊,不滿的填充字符*}程序運行結果如圖所示。2.使用成員函數進行格式控制通過調用流對象cout中有關格式控制的成員函數也可以控制輸出格式,用于格式控制的常用成員函數如表所示。格式標志在類ios中被定義為枚舉值,因此在引用它們時需要在前面加上類名ios和作用域限定符“::”。常用的格式標志如下頁表所示。【例6-8】

使用成員函數進行格式控制的應用示例。#include<iostream.h>voidmain(){cout.fill('*'); //設置填充字符為*cout.width(10); //設置顯示寬度為10cout<<255<<endl;cout.unsetf(ios::dec); //取消十進制顯示cout.setf(ios::hex); //設置十六進制顯示cout<<255<<endl;cout.unsetf(ios::hex); //取消十六進制顯示cout.setf(ios::left); //左對齊顯示數據cout<<255<<endl;cout.unsetf(ios::left); //取消左對齊顯示cout.width(10); //設置顯示寬度為10cout.setf(ios::showpos); //輸出正數時顯示“+”號cout.setf(ios::internal); //左顯示符號,中間填充字符,右顯示數據cout<<255<<endl;cout.unsetf(ios::showpos); //取消顯示“+”號cout<<123.456782<<endl; //默認顯示精度為6cout.precision(8); //設置輸出精度為8cout<<123.456782<<endl;cout.setf(ios::scientific); //將數據按科學計數法輸出cout.precision(6); //表示小數點后數字位數為6cout<<123.456782<<endl;cout.unsetf(ios::scientific); //取消科學計數法輸出cout.setf(ios::fixed); //將數據按定點小數輸出cout<<123.4567<<endl;}程序運行結果如圖所示。(五)流運算符的重載流插入運算符“<<”和流提取運算符“>>”是C++在類庫中提供的,在頭文件“iostream.h”中已經對其進行了重載,使之能用來輸出和輸入C++標準類型的數據。而用戶自定義類型的數據,是不能直接用“<<”和“>>”來輸出和輸入的。要想使用它們輸出和輸入自定義類型的數據,必須對它們重載。流插入運算符重載的一般形式為:ostream&operator<<(ostream&形參1,自定義類型&形參2)流提取運算符重載的一般形式為:istream&operator>>(istream&形參1,自定義類型&形參2)【例6-9】

重載流運算符“<<”和“>>”應用示例。#include<iostream.h>classComplex{public:Complex();friendostream&operator<<(ostream&out,Complex&c);//聲明流插入運算符“<<”重載函數friendistream&operator>>(istream&in,Complex&c);//聲明流提取運算符“>>”重載函數private:doublereal; //實部doubleimag; //虛部};

Complex::Complex(){real=0;imag=0;}ostream&operator<<(ostream&out,Complex&c) //定義重載運算符“<<”函數{out<<c.real<<"+"<<c.imag<<"i";returnout;}istream&operator>>(istream&in,Complex&c) //定義重載運算符“>>”函數{cout<<"實部:";in>>c.real;cout<<"虛部:";in>>c.imag;returnin;}voidmain(){Complexm,n;cout<<"請分別輸入兩個復數"<<endl;cin>>m>>n;cout<<"復數1為:";cout<<m<<endl;cout<<"復數2為:"<<n<<endl;}程序運行結果如圖所示。任務實施——求解一元二次方程案例說明案例分析首先,根據a和b2-4ac的值判斷該一元二次方程是否有解,若有解,則根據通解公式求出兩個根并輸出;若無解,則輸出出錯信息。實施步驟步驟1在VisualC++中新建一個C++源文件,根據分析編寫代碼如下:#include<iostream.h>#include<math.h>intmain(){floata,b,c,disc;for(inti=0;i<3;i++){cout<<"pleaseinputa,b,c:";cin>>a>>b>>c;if(a==0)cerr<<"acannotbezero!"<<endl; //將出錯信息插入cerr流,在屏幕上輸出elseif((disc=b*b-4*a*c)<0)cerr<<"b*b-4*a*ccannotbesmallerthanzero,nosolution!"<<endl;else{cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;}}return0;}步驟2程序運行結果如圖所示。任務二

學習文件流的相關知識任務說明文件是程序設計中的一個重要概念。所謂文件,通常是指存儲在外部介質上的數據集合。例如,人們經常使用的Word文檔、圖片、應用程序等都是文件。預備知識一、文件的特點二、文件流類和流對象三、文件的打開與關閉四、文件的讀寫操作五、文件指針的使用一、文件的特點根據文件中數據的組織形式不同,文件可分為ASCII文件和二進制文件。ASCII文件又稱文本文件或字符文件,它的每個字節放一個ASCII代碼,表示一個字符。二進制文件又稱內部格式文件或字節文件,它是將數據按照其在內存中的存儲形式原樣輸出到磁盤上存放。對于字符數據,由于它在內存中是以ASCII碼形式存放的,因此無論是以ASCII文件輸出還是二進制文件輸出,其數據形式是一樣的。但對于數值數據,二者的輸出是不同的,如圖所示。二、文件流類和流對象文件流是以磁盤文件為輸入/輸出對象的數據流。輸入文件流是從磁盤文件流向內存的數據,輸出文件流是由內存流向磁盤文件的數據,每個文件流都有一個內存緩沖區與之對應。下圖形象地表示了文件流的輸入和輸出。C++中提供了ifstream、ofstream和fstream三個文件流類,用來處理磁盤文件的輸入/輸出操作,它們的功能如下:ifstream:輸入流類,由istream派生來,用于從磁盤文件輸入數據。ofstream:輸出流類,由ostream派生來,用于向磁盤文件輸出數據。fstream:輸入/輸出流類,由iostream派生來,用于磁盤文件的輸入/輸出。三、文件的打開與關閉在進行文件的讀寫操作之前,需要為文件流對象和目標磁盤文件建立關聯,使文件流流向指定的磁盤文件,并指定文件的工作方式,即打開文件。操作文件結束后,必須關閉文件,即將文件流與磁盤文件的關聯斷開,否則可能導致數據丟失。1.文件的打開方法在C++中,可以調用文件流的成員函數open()實現文件的打開,它定義在頭文件fstream中,原型為:voidopen(constchar*,intopen_mode,intaccess=filebuf::openprot);其中,第一個參數為將要打開的文件路徑和文件名;第二個參數指定文件打開的方式(輸入/輸出方式);第三個參數指定文件的訪問方式,默認為filebuf::openprot(以共享/保護打開文件)。其調用的一般形式為:文件流對象.open(文件名,輸入/輸出方式);例如:ofstreamout; //定義ofstream類對象outout.open("outfile.txt",ios::out);/*打開磁盤文件outfile.txt,并指定它為輸出文件,文件流對象out將向磁盤文件outfile.txt輸出數據*/輸入/輸出方式是在基類ios類中定義的枚舉常量。表中給出了文件輸入/輸出方式的設置值。在C++中,還可以用構造函數打開文件,即在聲明文件流類時定義帶參數的構造函數。例如:ostreamout("outfile.txt",ios::out);2.文件的關閉方法要關閉文件,可以調用文件流的成員函數close(),其調用形式為:文件流對象名.close();關閉了該磁盤文件之后,才可以將文件流與其他磁盤文件建立關聯,對新的文件進行輸入/輸出。例如:ofstreamout; //建立輸出流對象out.open("outfile.txt",ios::out); //輸出文件流與outfile.txt建立關聯out.close(); //將輸出文件流所關聯的磁盤文件關閉out.open("outfile_another.txt",ios::out); //輸出文件流與outfile_another.txt建立關聯【例6-10】

文件的打開與關閉應用示例。假設當前目錄下存在文件“aa.txt”,打開該文件并進行讀寫操作,操作完后關閉該文件。#include<fstream.h>voidmain(){ofstreamout; //創建輸出流對象out.open("aa.txt",ios::nocreate); //打開文件if(!out) //打開失敗cout<<"文件不存在,打開失敗!"<<endl;else //打開成功{cout<<"文件已打開,可以進行讀寫操作!"<<endl;out<<"HelloWorld!“;}out.close(); //關閉文件cout<<"文件已關閉!"<<endl;}程序運行結果如圖所示。四、文件的讀寫操作1.對ASCII文件的操作對于ASCII文件,可以通過文件流對象和流插入運算符“<<”及流提取運算符“>>”實現對磁盤文件的讀寫,與cin和cout的使用方法相同。另外,使用前面介紹的的文件流的get()、getline()、put()等成員函數也可以實現字符的輸入/輸出。【例6-11】ASCII文件操作應用示例。將當前目錄下源文件“a.txt”中的內容輸出到目標文件“b.txt”中。#include<iostream.h>#include<fstream.h>voidmain(){fstreaminf,ouf; //定義流對象charffn[20]="a.txt",dfn[20]="b.txt",ch[10]; //定義字符串變量存放文件名cout<<"源文件名:";cout<<ffn<<endl;cout<<"目標文件名:";cout<<dfn<<endl;inf.open(ffn,ios::in); //以輸入的方式打開源文件if(!inf) //打開源文件失敗{cerr<<"打開文件a.txt失敗!"<<endl;return; }else //打開源文件成功{cout<<"打開文件a.txt成功!"<<endl;cout<<"可以對文件a.txt進行讀操作!"<<endl;}ouf.open(dfn,ios::out); //以輸出的方式打開目標文件for(inti=0;i<10;i++) {inf>>ch[i];//從源文件讀入10個字符順序存放在字符數組ch中ouf<<ch[i];//將字符數組ch中的10個字符寫入目標文件中}inf.close(); //關閉源文件cout<<"關閉文件a.txt!"<<endl;ouf.close(); //關閉目標文件cout<<"關閉文件b.txt!"<<endl;}程序運行結果如圖所示。2.對二進制文件的操作二進制文件與ASCII文件存儲數據的方式有所不同,它將內存中數據直接保存到磁盤文件中。由于文件中的信息以二進制形式存儲,故這種文件又稱字節文件。對二進制文件進行讀寫操作時,需要首先在打開文件時用ios::binary指定以二進制形式操作文件,然后可通過使用istream類的成員函數read()和ostream類的成員函數write()具體實現讀寫操作。其函數原型為:istream&read(char*buffer,intlen);ostream&write(constchar*buffer,intlen);

其中,第一個參數buffer指向內存中存放數據的緩沖區,第二個參數說明要讀出或寫入數據的字節數。兩個函數的作用分別是:從流中讀出長度為len的數據存入buffer指向的緩沖區,從buffer所指向的緩沖區把長度為len的數據寫到相應的流中。其調用的一般形式為:輸入流對象名.read(指針變量名,讀寫的字節數);輸出流對象名.write(指針變量名,讀寫的字節數);

例如:istreaminf;inf.read(p1,20);表示從inf所關聯的文件中讀入20個字節,存放在起始地址為p1的一段內存中。ostreamouf;ouf.write(p2,sizeof(int));表示從起始地址為p2的緩沖區中,將長度為sizeof(int),即4個字節的數據,寫入到與ouf所關聯的文件中。【例6-12】

二進制文件操作示例。將內存中的數據以二進制形式存入文件,然后從文件中讀出該數據并將其顯示在屏幕上。#include<iostream.h>#include<fstream.h>voidmain(){shorti=50;ofstreamouf("f:\\tmp.txt",ios::binary);//用構造函數以二進制形式打開輸出文件if(!ouf) //打開文件失敗{cerr<<"openerror!"<<endl;return;}ouf.write((char*)(&i),sizeof(i)); //以二進制形式寫入iouf.close(); //關閉文件cout<<i<<endl;ifstreaminf; //創建輸入流文件inf.open("f:\\tmp.txt",ios::binary);//用成員函數以二進制形式打開輸入文件程序運行結果如圖所示。if(!inf) //打開文件失敗{ cerr<<"openerror!"<<endl;return;}shortk;inf.read((char*)(&k),sizeof(k)); //將文件中內容讀入kinf.close(); //關閉文件cout<<k<<endl;}五、文件指針的使用前面介紹的對文件的讀寫操作,都是按一定順序對文件中的數據逐個進行訪問,稱為順序讀寫。但對于二進制文件,C++還提供了文件的隨機讀寫。磁盤文件中有一個用來指示當前位置的文件指針,每讀入一個字節,指針就后移一個字節。通過對文件指針的控制,使用戶可以隨機訪問二進制文件中任意位置上的數據。與文件指針有關的成員函數如表所示。“文件中的位置”和“位移量”、“參照位置”均以字節為單位。其中,“文件中的位置”表示指針在文件中的位置,“參照位置”表示文件指針的起始位置,“位移量”表示相對于起始位置的位移量,用“+”和“-”表示指針的前后移動,省略時為向前移動。“參照位置”的取值有以下三種:ios::beg:文件開頭,為默認值ios::cur:指針當前位置ios::end:文件末尾例如:ouf.seekp(-278);//輸出文件中的指針向后移到278字節位置inf.seekg(30,ios::cur); //輸入文件中指針從當前位置前移30個字節inf.seekp(45,ios::end); //輸出文件中指針從文件末尾前移45個字節【例6-13】

文件指針應用示例。二進制文件的隨機讀寫。#include<iostream.h>#include<fstream.h>#include<string.h>voidmain(){fstreamfile("a.txt",ios::in|ios::out); //以輸入/輸出方式打開文件charstr[]="GoodMorning!";charch;file.write(str,strlen(str)); //將字符串寫入文件file.seekg(5,ios::beg); //指針從文件開頭前移5個字節while(!file.eof()) //讀取數據,直至文件末尾{file.get(ch);cout<<ch;}cout<<endl;file.seekg(8); //指針移到絕對位置8字節處cout<<file.rdbuf()<<endl; //輸出當前位置開始的字符file.close(); //關閉文件}程序運行結果如圖所示。任務實施——三角函數值的寫入與讀出案例說明編寫一個程序,創建一個結構體類型,其成員為x、sin(x)、cos(x)和tan(x),其中x的取值為10、20…100,以二進制形式將其存入磁盤文件中,然后再將其讀出并輸出到屏幕上,輸出時數據的寬度為10,并保持左對齊。案例分析首先設計結構體類型,將數據存入定義的結構體數組中。然后,以二進制形式打開想要寫入數據的文件,將結構體數組的值寫入,關閉文件。再次打開想要讀取數據的文件,將文件中的數據存入一個臨時結構體數組中,最后使用標準輸出流對象將該結構體數組中的數據成員向顯示器輸出,同時要使用格式控制符設置輸出數據的格式。實施步驟步驟1在VisualC++中新建一個C++源文件,根據分析編寫代碼如下:#include<iostream.h>#include<math.h>#include<fstream.h>#include<iomanip.h>structelem //定義結構體{doublex;doubles;doublec;doublet;}test[10];intmain(){inti,n;for(i=10;i<=100;i+=10){n=i/10-1;test[n].x=i; test[n].s=sin(i); test[n].c=cos(i); test[n].t=tan(i);}ofstreamouf("data.txt",ios::out|ios::binary); //以二進制輸出形式打開文件ouf.write((char*)&test,10*sizeof(elem)); //將test的值寫入文件ouf.close(); //關閉文件ifstreaminf; //創建輸入文件流對象inf.open("data.txt",ios::in|ios::binary);//以二進制輸入形式打開文件if(!inf.is_open()) //打開文件失敗{cerr<<"Can'topendata.txt!"<<endl;return0;}elemtemp[10];cout.setf(ios::left); //設置左對齊輸出for(i=0;i<10;i++){inf.read((char*)&temp[i],sizeof(elem)); //將文件中的數據讀入temp中cout<<"x="<<temp[i].x //向顯示器輸出從文件中讀出的內容<<"sin("<<temp[i].x<<")="<<setw(10)<<temp[i].s<<"cos("<<temp[i].x<<")="<<setw(10)<<temp[i].c<<“tan("<<temp[i].x<<")="<<setw(10)<<temp[i].t<<endl;}inf.close(); //關閉文件return0;}步驟2程序運行結果如圖所示。項目拓展二進制文件的應用實例【例6-14】

二進制文件應用示例(一)。/*****************************************************************將用戶信息(姓名和年齡)寫入到二進制文件inout_bifile.txt中*****************************************************************/#include<iostream.h>#include<fstream.h>intmain(){charfilename[81]; //用來存放指定的文件名intn; //用來存放用戶記錄的記錄號charname[20]; //用來存放用戶的姓名intage; //用來存放用戶的年齡charyes;//計算記錄大小,以便決定一條記錄在文件中占用的空間大小intrecsize=sizeof(name)+sizeof(int);cout<<"請在此輸入文件的名:";cin>>filename; //輸入文件名稱,最大80個字符fstreamfbin(filename,ios::binary|ios::in|ios::

溫馨提示

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

評論

0/150

提交評論