版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十一章
輸入/輸出流第十一章輸入/輸出流學習目標掌握C++輸入/輸出流(I/O流)的基本概念;能夠在輸入/輸出中進行基本的格式控制;掌握文件的I/O操作。2學習目標掌握C++輸入/輸出流(I/O流)的基本概念;2目錄11.1C++輸入輸出流的概念11.1.1什么是輸入輸出流11.1.2流類庫的頭文件11.1.3預定義流對象11.1.4I/O流庫的類體系11.1.5輸出流舉例11.1.6輸入流舉例3目錄11.1C++輸入輸出流的概念3目錄(續(xù))11.2無格式的輸入/輸出11.2.1無格式輸入11.2.2無格式輸出11.3有格式的輸入/輸出11.3.1默認的輸入/輸出格式11.3.2格式標志的設置11.3.3格式控制操縱符11.4I/O流的狀態(tài)4目錄(續(xù))11.2無格式的輸入/輸出4目錄(續(xù))11.5文件流11.5.1文件的概念11.5.2文件流的建立11.5.3文件流的關閉11.5.4兩種特殊的文件流11.6字符串流11.6.1字符串流的建立11.6.2字符串流的緩沖區(qū)操作11.7針對自定義類型重載>>和<<5目錄(續(xù))11.5文件流511.1.1什么是輸入/輸出流C++將數(shù)據(jù)從一個對象到另一個對象的流動抽象為“流”。在程序中,“流”具體體現(xiàn)為一個對象,負責在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)消費者之間建立聯(lián)系,控制數(shù)據(jù)的流動。例如cin、cout就是兩個流對象。利用I/O流既可進行有格式輸入/輸出,也可進行無格式輸入/輸出。為了實現(xiàn)格式化的輸出,I/O流類庫提供了豐富的流操縱符,比如設置輸出域的寬度,設置輸出精度,設置填充字符等。611.1
C++輸入輸出流的概念11.1.1什么是輸入/輸出流C++將數(shù)據(jù)從一個對象到另一11.1.2流類庫的頭文件<iostream>:
包括istream、ostream、iostream以及cin、cout、ceer和clog對象的定義,同時提供非格式化和格式化的I/O服務。針對標準設備的I/O操作,須包含之。<sstream>:
包括istringstream、ostringstream、stringstream的定義,要使用字符串流對象進行針對內存字符串空間的I/O操作,須包含此文件。<fstream>:
包括ifstream、ofstream、fstream的定義,要使用文件流對象進行針對磁盤文件的I/O操作,須包含此文件。<iomanip>:
包括setw、fixed等等操縱符的定義,利用操縱符進行格式化I/O操作,須包含之。711.1
C++輸入輸出流的概念11.1.2流類庫的頭文件<iostream>: 711.11.1.3預定義流對象C++中一共有4個預定義流對象,它們的名稱及與之聯(lián)系的I/O設備如下:cin 標準輸入流對象,對應標準輸入設備
cout 標準輸出流對象,對應標準輸出設備
cerr 標準錯誤信息輸出流對象,對應標準出錯信息輸出設備
clog 標準錯誤信息輸出流對象,對應帶緩沖的標準出錯信息輸出設備這里提到的標準輸入設備和標準輸出設備是操作系統(tǒng)下的兩種虛擬設備,每種虛擬設備都與一種具體的設備相連接。通常情況下,標準輸入設備與鍵盤相連接,標準輸出設備與顯示器相連接,但可以重定向為與其他設備(如磁盤)。在程序中可以定義自己的流對象(稱為自定義流對象),以滿足特定輸入、輸出需求。811.1
C++輸入輸出流的概念11.1.3預定義流對象C++中一共有4個預定義流對象,它11.1.4I/O流庫的類體系I/O流庫的類體系C++通過一系列的流類將不同類型數(shù)據(jù)的輸入/輸出操作封裝起來,以面向對象的方式規(guī)范各種輸入/輸出操作,提供了一套簡化的操作界面,使得不同類型的數(shù)據(jù)的輸入/輸出可以采用相同的語法格式。部分流類之間的繼承關系如圖。911.1
C++輸入輸出流的概念11.1.4I/O流庫的類體系I/O流庫的類體系911.111.1.5輸出流舉例一個輸出流對象是信息流動的目標,最重要的三個輸出流是ostream、ostringstream和ofstream。ostream是通用輸出流類,cout、cerr和clog都是它的對象;ostringstream是字符串輸出流類,它將一片內存空間作為輸出設備;ofstream是文件輸出流類。1011.1
C++輸入輸出流的概念11.1.5輸出流舉例一個輸出流對象是信息流動的目標,最重例11-1:向標準設備輸出字符串#include<iostream>usingnamespacestd;intmain(){
char*word="helloworld!";
doublepi=3.1415926;
intdayOfYear=365;
cout<<"valueofwordis:"<<word<<endl;
cout<<"PI="<<pi<<endl;
cout<<"daysofyear:"<<dayOfYear<<endl;
cout.put('B').put('C').put('\n');
return0;}1111.1輸入輸出流的概念——11.1.5輸出流舉例例11-1:向標準設備輸出字符串#include<iost運行結果:valueofwordis:helloworld!PI=3.14159daysofyear:365BC例11-1(續(xù))11.1輸入輸出流的概念——11.1.5輸出流舉例運行結果:例11-1(續(xù))11.1輸入輸出流的概念——1111.1.6輸入流舉例最重要的三個輸入流istream、istringstream和ifstream。Istream是通用輸入流類,cin即為它的對象;istringstream是字符串輸入流類,它將一片內存空間作為輸入設備;ifstream是文件輸入流類。cin是預定義的標準輸入流對象。get()函數(shù)從指定流輸入一個字符并將這個值作為函數(shù)調用的返回值返回,在遇到文件尾時返回EOF。如果用流提取運算符>>,注意流提取運算符遇到空格就結束。1311.1
C++輸入輸出流的概念11.1.6輸入流舉例最重要的三個輸入流1311.1C+例11-2:輸入字符串#include<iostream>usingnamespacestd;intmain(){
intcharacter;
cout<<"beforeinput,cin.eof()="<<cin.eof()<<endl;
cout<<"pleaseinputasentence:"<<endl;
while((character=cin.get())!=EOF)
cout.put(character);
cout<<"EOFinthissystemis:"<<character<<endl;
cout<<"afterinputofEOF,cin.eof()="<<cin.eof()<<endl;
return0;}1411.1輸入輸出流的概念——11.1.6輸入流舉例例11-2:輸入字符串#include<iostream>運行結果:beforeinput,cin.eof()=0pleaseinputasectence:IamagoodC++programmerIamagoodC++programmer^ZEOFinthissystemis:-1AfterinputofEOF,cin.eof()=1例11-2(續(xù))11.1輸入輸出流的概念——11.1.6輸入流舉例15運行結果:例11-2(續(xù))11.1輸入輸出流的概念——11例11-3:輸入指定長度的字符串#include<iostream>usingnamespacestd;intmain(){
constintSIZE=80;
charbuf1[SIZE];
charbuf2[SIZE];
cout<<"pleaseinputasentence:"<<endl;
cin>>buf1;
cout<<"thestringreadwithcinwas:"<<endl<<buf1<<endl;
cin.get(buf2,SIZE);
cout<<"thestringreadwithcin.getwas:"<<endl<<buf2<<endl;
return0;}1611.1輸入輸出流的概念——11.1.6輸入流舉例例11-3:輸入指定長度的字符串#include<iost運行結果:pleaseinputasectence:heisaC++programmerthestringreadwithcinwas:hethestringreadwithcin.getwas:isaC++programmer例11-3(續(xù))11.1輸入輸出流的概念——11.1.6輸入流舉例17運行結果:例11-3(續(xù))11.1輸入輸出流的概念——1111.2無格式的輸入輸出無格式輸入/輸出是一種內存映像式的輸入/輸出,不對數(shù)據(jù)做任何轉換,也稱為二進制輸入/輸出,打開文件的模式為ios_base::binary。無格式輸入/輸出主要針對二進制磁盤文件,不能針對打印機、顯示器等字符設備。cin、cout等預定義流對象不能用于無格式輸入/輸出。1811.2無格式的輸入輸出無格式輸入/輸出是一種內存映像式的11.2無格式的輸入輸出(續(xù))在下面有關函數(shù)的說明中用到一些類型定義,包括:streamsize:表示流大小的類型,一般就是int或long;int_type:整數(shù)類類型,一般就是int或long;istream_type:輸入流類型,一般就是istream;ostream_type:輸出流類型,一般就是ostream;char_type:字符類類型,一般就是char;off_type:偏差(相對位置)類型,一般就是long;pos_type:位置類型,一般就是long。1911.2無格式的輸入輸出(續(xù))在下面有關函數(shù)的說明中用到一11.2.1無格式的輸入與無格式輸入有關的類包括istream、istringstream和ifstream這三個輸入流類,以及stream、stringstream和fstream這三個輸入/輸出流類。無格式輸入有關的函數(shù)streamsizegcount()const;返回最近一次無格式輸入的字節(jié)數(shù)。int_typeget();返回提取的當前輸入位置的字符(不會跳過空白字符),若已到流尾而無字符可輸入,返回EOF(即-1);istream_type&get(char_type&c);提取當前輸入位置的字符(不會跳過空白字符)存入c,若已到流尾而無字符可輸入,存入c中的是'\0'。istream_type&get(char_type*s,streamsizen,char_typedelim);從當前輸入位置開始提取字符存入s所指的具有n個字節(jié)的字符空間中。2011.2無格式的輸入輸出11.2.1無格式的輸入與無格式輸入有關的類2011.211.2.1無格式的輸入(續(xù))無格式輸入有關的函數(shù)istream_type&get(char_type*s,streamsizen);
此函數(shù)調用
get(s,n,widen(‘\n’)),即已換行符為分界符,用以輸入一行字符,參見上面關于get函數(shù)的描述。istream_type&ignore(streamsizen=1,int_typedelim=traits::eof());
提取并舍棄(即不存儲)從當前輸入位置開始的若干字符,因而只起到后移輸入位置的作用。int_typepeek();
返回當前位置上的字符,但輸入位置不動,因此下一次輸入字符時,得到還是同一字符。若已到流尾而無字符可輸入,返回EOF(即-1)。istream_type&unget();
使輸入位置倒退一個字符,使得上次被輸入的字符再次成為下一個輸入字符。istream_type&read(char_type*s,streamsizen);
從當前輸入位置開始提取字節(jié)存入s所指的具有n個字節(jié)的字符空間中。2111.2無格式的輸入輸出11.2.1無格式的輸入(續(xù))無格式輸入有關的函數(shù)211111.2.2無格式的輸出與輸出有關的類包括ostream、ostringstream和ofstream這三個輸出流類,以及stream、stringstream和fstream這三個輸入/輸出流類。與無格式輸出有關的函數(shù)ostream_type&put(char_typec);輸出字符costream_type&write(constchar_type*s,streamsizen);輸出s所指向的數(shù)據(jù)空間中的n個字節(jié)
2211.2無格式的輸入輸出11.2.2無格式的輸出與輸出有關的類2211.2無格式11.3.1默認的輸入/輸出格式運算符>>默認的輸入格式short、int、long(signed、unsigned):與整型常量同;float、double、longdouble:與浮點數(shù)常量同;char(signed、unsigned):第一個非空白字符;char*(signed、unsigned):從第一個非空白字符開始到下一個空白字符結束;bool:將true或1識別為邏輯真(true),其他的均識別為邏輯假(false);void*:無前綴的16進制數(shù)。2311.3有格式的輸入輸出11.3.1默認的輸入/輸出格式運算符>>默認的輸入格式2311.3.1默認的輸入/輸出格式(續(xù))運算符<<默認的輸出格式char(signed、unsigned):單個字符(無引號)short、int、long(signed、unsigned):一般整數(shù)形式,負數(shù)前有-號char*(signed、unsigned):字符序列(無引號)float、double、longdouble:浮點格式或指數(shù)格式(科學表示法),取決于哪個更短
void*:無前綴的16進制數(shù)Bool:1或02411.3有格式的輸入輸出11.3.1默認的輸入/輸出格式(續(xù))運算符<<默認的輸出格11.3.2格式標志的設置2511.3有格式的輸入輸出11.3.2格式標志的設置2511.3有格式的輸入輸出11.3.2格式標志的設置(續(xù))2611.3有格式的輸入輸出11.3.2格式標志的設置(續(xù))2611.3有格式的輸入11.3.3格式控制操縱符控制數(shù)制的操縱符:Dec功能:(初始狀態(tài))將整數(shù)按10進制輸入/輸出;
等價函數(shù)調用:io.setf(ios_base::dec,ios_base::basefield)Oct功能:將整數(shù)按8進制輸入/輸出;
等價函數(shù)調用:io.setf(ios_base::oct,ios_base::basefield)Hex功能:將整數(shù)按16進制輸入/輸出;
等價函數(shù)調用:io.setf(ios_base::hex,ios_base::basefield)setbase(base)功能:設置為指定的數(shù)制,其中base為8、10或16;
等價函數(shù)調用:io.setf(ios_base::oct,ios::basefield)等控制數(shù)制標志輸出的操縱符:showbase功能:為輸出的整數(shù)生成一個表示數(shù)制的前綴:對于八進制數(shù)前面輸出一個無效0;對于十六進制數(shù)前面輸出0x;
等價函數(shù)調用:o.setf(ios_base::showbase)noshowbase功能:(初始狀態(tài))輸出的整數(shù)沒有表示數(shù)制的前綴
等價函數(shù)調用:o.unsetf(ios_base::showbase)2711.3有格式的輸入輸出11.3.3格式控制操縱符控制數(shù)制的操縱符:2711.311.3.3格式控制操縱符(續(xù))控制數(shù)制標志中字母X的大小寫的操縱符:Uppercase功能:將輸出的十六進制數(shù)據(jù)(包括表示數(shù)制的前綴)中的字母以大寫形式表示(如0X3F);
等價函數(shù)調用:o.setf(ios_base::uppercase)nouppercase功能:(初始狀態(tài))將輸出的十六進制數(shù)據(jù)(包括表示數(shù)制的前綴)中的字
母以小寫形式表示(如0x3f)。
等價函數(shù)調用:o.unsetf(ios_base::uppercase))2811.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))控制數(shù)制標志中字母X的大小例11-4:輸入/輸出的數(shù)制控制示例#include<iostream>#include<iomanip>usingnamespacestd;
intmain(){
inti,j;
cin>>hex>>i>>showbase>>j;
cout<<i<<'\t'<<j;
cout<<endl<<oct<<i<<'\t'<<showbase<<j<<endl;
return0;}2911.3有格式的輸入輸出——11.3.3格式控制操作符例11-4:輸入/輸出的數(shù)制控制示例#include<ios運行結果:63250770372例11-4(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符30運行結果:例11-4(續(xù))11.3有格式的輸入輸出——1111.3.3格式控制操縱符(續(xù))輸入/輸出寬度的控制寬度控制是一種與格式標志無關的控制。寬度的設置可用于輸入,但只對字符串輸入有效。對于輸入,寬度是指字符串空間的寬度,由于要存儲字符串結束符’\0’,因此實際可接收的輸入字符數(shù)比寬度少1。對于輸出,寬度是指最小輸出寬度。當實際數(shù)據(jù)寬度小于指定的寬度時,多余的位置用填充字符(通常是空格)添滿;當實際數(shù)據(jù)的寬度大于設置的寬度時,仍按實際的寬度輸出。初始寬度值為0,意味著所有數(shù)據(jù)都將按實際寬度輸入/輸出。寬度設置的效果沒有延續(xù)性,只對一個數(shù)據(jù)的輸入或輸出有效,在完成一個數(shù)據(jù)的輸入或輸出后,又回到初始寬度值0,即按實際數(shù)據(jù)寬度輸入或輸出。有關的操縱符是:setw(n) 功能:設置輸入/輸出寬度,其中n為表示寬度的整數(shù);等價函數(shù)調用:io.width(n)3111.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))輸入/輸出寬度的控制311例11-5:輸入/輸出寬度控制示例#include<iostream>#include<iomanip>usingnamespacestd;
intmain(){
chars1[20],s2[20];
cin>>setw(5)>>s1>>s2;
cout<<setw(8)<<s1<<'!'<<endl;
cout<<s1<<'!'<<endl;
cout<<setw(8)<<s2<<'!'<<endl;
return0;}3211.3有格式的輸入輸出——11.3.3格式控制操作符例11-5:輸入/輸出寬度控制示例#include<iost運行結果:abcd!abcd!efghijklmnop!例11-5(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符33運行結果:例11-5(續(xù))11.3有格式的輸入輸出——1111.3.3格式控制操縱符(續(xù))輸出精度的控制精度的控制是一種與格式標志無關的控制。精度是針對浮點數(shù)設置的,精度設置對于輸入流無效。對于輸出流,初始精度值為6,可以通過設置改為任意精度;將精度設置0意味著回到初始精度6。有關操縱符是:setprecision(n) 功能:設置浮點數(shù)的精度,其中n為精度的整數(shù);等價函數(shù)調用:o.precision(n),函數(shù)返回此前設置的精度;如果只需要這個返回值,可不給出參數(shù)。3411.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))輸出精度的控制3411.311.3.3格式控制操縱符(續(xù))浮點數(shù)輸出方式的控制浮點數(shù)都按浮點格式輸出,精度的含義是有效位的個數(shù),小數(shù)點的相對位置隨數(shù)據(jù)的不同而浮動;可以改變設置,使浮點數(shù)按定點格式或指數(shù)格式
(科學表示法,如3.2156e+2)輸出。在這種情況下,精度的含義是小數(shù)位數(shù),小數(shù)點的相對位置固定不變,必要時進行舍入處理或添加無效0。有關操縱符有:resetiosflags(ios_base::floatfield)功能:(初始狀態(tài))浮點數(shù)按浮點格式輸出;
等價函數(shù)調用:o.setf(0,ios_base::floatfield)fixed 功能:浮點數(shù)按定點格式輸出;
等價函數(shù)調用:o.setf(ios_base::fixed,ios_base::floatfield)scientific功能:浮點數(shù)按指數(shù)格式(科學表示法)輸出;
等價函數(shù)調用:o.setf(ios_base::scientific,ios_base::floatfield)3511.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))浮點數(shù)輸出方式的控制351例11-6:設計函數(shù)sqrt_table(),它輸出一個平方根表,其中包含了所有不超過兩位數(shù)的平方根,精確到小數(shù)點后4位3611.3有格式的輸入輸出——11.3.3格式控制操作符例11-6:設計函數(shù)sqrt_table(),它輸出一個平方例11-6(續(xù))#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;
voidsqrt_table(){
cout<<endl<<"|";
inti;//以下3行顯示頂部表欄
for(i=0;i<10;i++)cout<<setw(7)<<i;cout<<endl<<"---+----------------------------------------------------------------------";
cout<<fixed<<setprecision(4); //設置為定點格式和4位精度
for(i=0;i<10;i++){ //十位數(shù)從0循環(huán)到9
cout<<endl<<setw(2)<<i<<"|“; //顯示左部表欄
for(intj=0;j<10;j++)cout<<setw(7)<<sqrt(i*10.0+j);
}
cout<<endl;}intmain(){
sqrt_table();
return0;}3711.3有格式的輸入輸出——11.3.3格式控制操作符例11-6(續(xù))#include<iostream>3711運行結果:|0123456789--+----------------------------------------------------------------------------------------0|0.00001.00001.41421.73212.00002.23612.44952.64582.82843.00001|3.16233.31663.46413.60563.74173.87304.00004.12314.24264.35892|4.47214.58264.69044.79584.89905.00005.09905.19625.29155.38523|5.47725.56785.65695.74465.83105.91616.00006.08286.16446.24504|6.32466.40316.48076.55746.63326.70826.78236.85576.92827.00005|7.07117.14147.21117.28017.34857.41627.48337.54987.61587.68116|7.74607.81027.87407.93738.00008.06238.12408.18548.24628.30667|8.36668.42618.48538.54408.60238.66038.71788.77508.83188.88828|8.94439.00009.05549.11049.16529.21959.27369.32749.38089.43409|9.48689.53949.59179.64379.69549.74689.79809.84899.89959.9499例11-6(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符38運行結果:例11-6(續(xù))11.3有格式的輸入輸出——1111.3.3格式控制操縱符(續(xù))小數(shù)點處理方式的控制
此設置只影響采用浮點格式(而非定點格式或指數(shù)格式)輸出的浮點數(shù)據(jù)。在初始狀態(tài)下,若一浮點數(shù)的小數(shù)部分為0,則不輸出小數(shù)點及小數(shù)點后的無效0;可以改變這一設置,使得在任何情況下都輸出小數(shù)點及其后的無效0。有關操縱符有:showpoint功能:即使小數(shù)部分為0,也輸出小數(shù)點及其后的無效0;
等價函數(shù)調用:o.setf(ios_base::showpoint)noshowpoint 功能:(初始狀態(tài))取消上述設置:小數(shù)部分為0時不輸出小數(shù)點;
等價函數(shù)調用:o.unsetf(ios_base::showpoint)3911.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))小數(shù)點處理方式的控制391例11-7:小數(shù)點處理方式控制示例#include<iostream>usingnamespacestd;
intmain(){ cout<<3.0<<showpoint<<""<<3.0<<noshowpoint<<""<<3.0<<endl; cout<<fixed<<3.0<<showpoint<<""<<3.0<<noshowpoint<<""<<3.0<<endl; cout<<scientific<<3.0<<showpoint<<""<<3.0<<noshowpoint<<""<<3.0<<endl;
return0;}4011.3有格式的輸入輸出——11.3.3格式控制操作符例11-7:小數(shù)點處理方式控制示例#include<iost運行結果:33.0000033.0000003.0000003.0000003.000000e+0003.000000e+0003.000000e+000例11-7(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符41運行結果:例11-7(續(xù))11.3有格式的輸入輸出——1111.3.3格式控制操縱符(續(xù))小數(shù)點處理方式的控制對齊方式的控制初始狀態(tài)為右對齊;可以改變這一設置,使得輸出采用左對齊方式或內部對齊方式。只有在設置了寬度的情況下,對齊操作才有意義。有關操縱符有:left功能:在設定的寬度內左對齊輸出,右端填以設定的填充字符;
等價函數(shù)調用:o.setf(ios_base::left,ios_base::adjustfield)Right功能:(初始狀態(tài))在設定的寬度內右對齊輸出,左端填以設定的填充字符;
等價函數(shù)調用:o.setf(ios_base::right,ios_base::adjustfield)internal功能:(內部對齊)在設定的寬度內右對齊輸出,左端填以設定的填充字符;但若有符號(-或+),符號置于設定寬度的最左端;
等價函數(shù)調用:o.setf(ios_base::internal,ios_base::adjustfield)4211.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))小數(shù)點處理方式的控制42111.3.3格式控制操縱符(續(xù))填充字符的控制填充字符控制是一種與格式標志無關的格式控制。在指定的輸出寬度內輸出數(shù)據(jù)時,多余的位置要用填充字符填滿。初始的填充字符為空格,可以設置任意字符作為填充字符。只有在設置了寬度的情況下,字符填充操作才有意義。有關操縱符是:setfill(c)功能:設置填充字符,其中c為一字符;
等價函數(shù)調用:io.fill(c),函數(shù)返回此前設置的填充字符;如果只需要這個返回值,可不給參數(shù)。4311.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))填充字符的控制4311.3例11-8:對齊方式及填充字符控制示意#include<iostream>#include<iomanip>usingnamespacestd;
intmain(){ cout<<setfill('*'); cout<<setw(10)<<-45; cout<<endl<<left<<setw(10)<<-55; cout<<endl<<internal<<setw(10)<<-65<<endl;
return0;}4411.3有格式的輸入輸出——11.3.3格式控制操作符例11-8:對齊方式及填充字符控制示意#include<io運行結果:*******-45-55*******-*******65例11-8(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符45運行結果:例11-8(續(xù))11.3有格式的輸入輸出——1111.3.3格式控制操縱符(續(xù))非負數(shù)的符號表示方式的控制在初始狀態(tài)下,0或正數(shù)前不用任何符號;可以改變這一設置,使得在0或正數(shù)前無條件地加上符號+。有關操縱符有:showpos功能:0或正數(shù)前加上符號+;
等價函數(shù)調用:o.setf(ios_base::showpos)noshowpos功能:(初始狀態(tài))0或正數(shù)前不用任何符號;
等價函數(shù)調用:o.unsetf(ios_base::showpos)邏輯值輸出方式的控制在初始狀態(tài)下,邏輯值true和false輸出為1和0;可以改變設置,使之輸出為true和false。有關操縱符有:boolalpha功能:將邏輯值輸出為true和false;
等價函數(shù)調用:io.setf(ios_base::boolalpha)noboolalpha 功能:(初始狀態(tài))取消上述設置:將邏輯值輸出為1和0;等價函數(shù)調用:io.unsetf(ios_base::boolalpha)4611.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))非負數(shù)的符號表示方式的控制例11-9:非負數(shù)的符號表示方式及邏輯常量輸出方式的控制的示意#include<iostream>#include<iomanip>usingnamespacestd;
intmain(){ cout<<0<<'\t'<<5<<'\t'<<-5<<endl; cout<<showpos<<0<<'\t'<<5<<'\t'<<-5<<endl; cout<<noshowpos<<(5>3)<<'\t'<<(5<3)<<endl; cout<<boolalpha<<(5>3)<<'\t'<<(5<3)<<endl;
return0;}4711.3有格式的輸入輸出——11.3.3格式控制操作符例11-9:非負數(shù)的符號表示方式及邏輯常量輸出方式的控制的示運行結果:05-5+0+5-510truefalse例11-9(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符運行結果:例11-9(續(xù))11.3有格式的輸入輸出——1111.3.3格式控制操縱符(續(xù))前導空白字符處理方式的控制
初始狀態(tài)下,輸入一數(shù)據(jù)時首先跳過前導空白字符??梢酝ㄟ^設置,使得輸入時不跳過空白字符。這樣的設置一直有效,直到改變設置為止。有關操縱符有:skipws功能:(初始狀態(tài))每次輸入時跳過前導空白字符;
等價函數(shù)調用:i.setf(ios_base::skipws)noskipws功能:每次輸入時不跳過前導空白字符;
等價函數(shù)調用:i.unsetf(ios_base::skipws)緩沖區(qū)工作方式的控制在一般情況下,輸出的數(shù)據(jù)暫存在輸出緩沖區(qū)中,直到緩沖區(qū)滿或流被關閉時才送往有關設備有關操縱符有:unitbuf功能:每次輸出后立即寫緩
等價函數(shù)調用:o.setf(ios_base::unitbuf)nounitbuf功能:(初始狀態(tài))數(shù)據(jù)輸出到緩沖區(qū)暫不寫出,待緩沖區(qū)滿或流被關閉時才寫出到所連接的設備中;
等價函數(shù)調用:o.unsetf(ios_base::unitbuf)4911.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))前導空白字符處理方式的控制11.3.3格式控制操縱符(續(xù))其他輸入/輸出控制操縱符還有幾個操縱符的功能不是格式控制,而是直接執(zhí)行特定的輸入/輸出操作。有關操縱符有:Endl功能:插入換行符(即‘\n’)并強制寫緩,實現(xiàn)輸出回車換行;
等價函數(shù)調用:o..put('\n').flush()Ends功能:插入字符串結束符‘\0’,常用于字符串流;
等價函數(shù)調用:o.put('\0')Ws功能:在noskipws狀態(tài)下輸入時,用來跳過前導空白字符。Flush功能:強制寫緩
等價函數(shù)調用:o.flush()5011.3有格式的輸入輸出11.3.3格式控制操縱符(續(xù))其他輸入/輸出控制操縱符5例11-10:通過使用文件名“CON”創(chuàng)建輸入文件流對象is和輸出文件流對象os,用來模擬預定義流對象cin和cout進行針對鍵盤和顯示器的輸入/輸出5111.3有格式的輸入輸出——11.3.3格式控制操作符例11-10:通過使用文件名“CON”創(chuàng)建輸入文件流對象is例11-10(續(xù))#include<iostream>#include<iomanip>#include<fstream>usingnamespacestd;
intmain(){ intx; ofstreamos("con"); ifstreamis("con");// is.tie(&os); //解決方案3// os<<unitbuf; //解決方案2 os<<"請輸入一個整數(shù):";// os<<flush; //解決方案1 is>>x; os<<"輸入的整數(shù)是:"<<x<<endl;
return0;}5211.3有格式的輸入輸出——11.3.3格式控制操作符例11-10(續(xù))#include<iostream>521運行結果1:這是所有注釋語句行保持原樣時的運行結果,其中第一行為鍵盤輸入:123請輸入一個整數(shù):輸入的整數(shù)是:123運行結果2:把標有“解決方案1”、“解決方案2”、“解決方案3”的注釋語句中任何一個語句行的行首的//去掉,再運行程序,三次的運行結果相同:請輸入一個整數(shù):123輸入的整數(shù)是:123例11-10(續(xù))11.3有格式的輸入輸出——11.3.3格式控制操作符53運行結果1:例11-10(續(xù))11.3有格式的輸入輸出——11.4I/O流的狀態(tài)C++I/O流的狀態(tài)用ios_base中一組狀態(tài)標志位來表示,同時定義了一組判斷、操縱這些標志位的成員函數(shù),常用的有boolgood()const:剛進行的操作成功時返回true,否則返回false;boolfail()const:與good()相反,剛進行的操作失敗時返回true,否則返回false;boolbad()const:如果進行了非法操作返回true,否則返回false;bad()為true時fail()必為true;booleof()const:進行輸入操作時,若到達流尾返回true,否則返回false,通常只用于輸入流;eof()為true時fail()必為true;voidclear():將流置為正常狀態(tài),使得good()返回true。5411.4I/O流的狀態(tài)C++I/O流的狀態(tài)用ios_ba例11-11:錯誤輸入后的錯誤狀態(tài)#include<iostream>usingnamespacestd;
intmain(){ intintValue;
cout<<"statebeforeabadinputoperation:"<<endl; cout<<"cin.rdstate():"<<cin.rdstate()<<endl <<"cin.eof():"<<cin.eof()<<endl <<"cin.fail():"<<cin.fail()<<endl <<"cin.bad():"<<cin.bad()<<endl <<"cin.good():"<<cin.good()<<endl;5511.4
I/O流的狀態(tài)例11-11:錯誤輸入后的錯誤狀態(tài)#include<ios例11-11(續(xù))cout<<“expectaninteger,butenteracharacter:”;cin>>intValue; cout<<“stateafterabadinputoperation:”<<endl;cout<<“cin.rdstate():”<<cin.rdstate()<<endl <<“cin.eof():”<<cin.eof()<<endl <<“cin.fail():”<<cin.fail()<<endl <<“cin.bad():”<<cin.bad()<<endl <<“cin.good():”<<cin.good()<<endl;cin.clear();cout<<“stateafterclear:”<<endl;cout<<“cin.fail():”<<cin.fail()<<endl
<<"cin.good():"<<cin.good()<<endl;
return0;}5611.4
I/O流的狀態(tài)例11-11(續(xù))cout<<“expectaninte運行結果1:statebeforeabadinputoperation:cin.rdstate():0cin.eof():0cin.fail():0cin.bad():0cin.good():1expectaninteger,butenteracharacter:Astateafterabadinputoperation:cin.rdstate():2cin.eof():0cin.fail():1cin.bad():0cin.good():0stateafterclear:cin.fail():0cin.good():1例11-11(續(xù))11.4
I/O流的狀態(tài)57運行結果1:例11-11(續(xù))11.4I/O流的狀態(tài)5711.5.1文件的概念磁盤文件以及視作文件的外部設備在磁盤上保存的信息是按文件的形式組織的,每個文件都有一個文件名,并且保存在一個確定的文件夾中。另外,操作系統(tǒng)把其他類型的一些外部設備也以文件的方式進行操作,視作特殊的文件。例如,把由鍵盤和顯示器組成的終端看作為輸入/輸出文件,當向它輸出信息時就是輸出到顯示器,當從它輸入信息時就是從鍵盤輸入。文本文件和二進制文件文本文件可以是磁盤文件,也可以是鍵盤、顯示器、打印機等稱為字符設備的外部設備。因此,適用于文本文件的操作也同樣適用于鍵盤、顯示器、打印機等設備,而適用于cin、cout等預定義流對象的操作也同樣適應于文本文件。可以用文本編輯器來查看、輸入、修改一個文本文件。二進制文件只能是磁盤文件。5811.5文件流11.5.1文件的概念磁盤文件以及視作文件的外部設備58111.5.1文件的概念(續(xù))輸入文件、輸出文件和輸入/輸出文件
對文件的訪問操作包括輸入和輸出兩種類型的操作。如果一個文件是為輸入操作而打開的,該文件就稱為輸入文件。如果一個文件是為輸出操作而打開的,就稱為輸出文件。有的文件打開后既用于輸入,也用于輸出,則稱之為輸入/輸出文件。5911.5文件流11.5.1文件的概念(續(xù))輸入文件、輸出文件和輸入/輸出11.5.2文件流的建立每個文件流都應當與一個打開的文件相聯(lián)系。可以用兩種不同的方式打開文件。 1)在建立文件流對象的同時打開文件
如:ifstreamfin("datafile.dat"); 2)先建立文件流對象,再在適當?shù)臅r候打開文件,
如:ifstreamfin;…… fin.open("datafile.dat");6011.5文件流11.5.2文件流的建立每個文件流都應當與一個打開的文件相11.5.2文件流的建立(續(xù))可以通過構造函數(shù)或open函數(shù)的第二個參數(shù),指定文件的打開模式。打開模式被定義為一組枚舉常量:
6111.5文件流11.5.2文件流的建立(續(xù))可以通過構造函數(shù)或open函11.5.3文件流的關閉關閉文件流用成員函數(shù)close().例如若fin是一個文件流對象,則可用下面的語句關閉:fin.close();如果程序沒有用close()主動關閉文件,則在文件流對象退出其作用域時,將自動調用文件流對象的析構函數(shù)關閉所聯(lián)系的文件。緩沖區(qū)中尚未寫入文件的數(shù)據(jù)將在文件關閉時實際地寫入到文件中。當不再使用文件時立即關閉文件是一個好的習慣,這除了能夠盡早釋放流對象所占用的計算機資源之外,還有利于文件中數(shù)據(jù)的安全。6211.5文件流11.5.3文件流的關閉關閉文件流用成員函數(shù)close()11.5.4兩種特殊的文件流以文件名"CON"打開的輸入文件流所聯(lián)系的設備是鍵盤,可用于鍵盤輸入;以"CON"為文件名打開的輸出文件流所聯(lián)系的設備是顯示器,以"CON"為文件名打開的輸入/輸出文件流所聯(lián)系的設備是終端,即鍵盤加顯示器。用文件名"PRN"打開的輸出文件流所聯(lián)系的設備是打印機,例如:ofstreamPrinter("PRN");
Print<<"此行文字被打印出來"<<endl;6311.5文件流11.5.4兩種特殊的文件流以文件名"CON"打開的輸入文例11-12:
CopyFile接收兩個參數(shù):輸入文件名和輸出文件名,完成從輸入文件和輸出文件的拷貝6411.5文件流——11.5.4兩種特殊的文件流例11-12:CopyFile接收兩個參數(shù):輸入文件名和輸例11-12(續(xù))//CopyFile.h#include<iostream>#include<fstream>usingnamespacestd;voidCopyFile(constchar*from,constchar*to);6511.5文件流——11.5.4兩種特殊的文件流例11-12(續(xù))//CopyFile.h6511.5文件例11-12(續(xù))//CopyFile.cpp#include"CopyFile.h"voidCopyFile(constchar*from,constchar*to){ cin.clear(); ifstreaminf(from); if(!inf){ cerr<<"輸入文件打開失??!"<<endl; exit(1); } ofstreamoutf(to,ios_base::trunc); if(!outf){ cerr<<"輸出文件打開失??!"<<endl; exit(3); } while(!inf.eof())outf.put(inf.get()); inf.close(); outf.close();}6611.5文件流——11.5.4兩種特殊的文件流例11-12(續(xù))//CopyFile.cpp6611.5例11-12(續(xù))//11-12.cpp#include"CopyFile.h"
intmain(){ charfin[30],fout[30]; cout<<"輸入文件:";cin>>fin; cout<<"輸出文件:";cin>>fout; CopyFile(fin,fout);
return0;}6711.5文件流——11.5.4兩種特殊的文件流例11-12(續(xù))//11-12.cpp6711.5文件流運行結果:輸入文件:copyfile.h輸出文件:con//CopyFile.h#include<iostream>#include<fstream>usingnamespacestd;voidCopy(constchar*from,constchar*to);例11-12(續(xù))11.5文件流——11.5.4兩種特殊的文件流68運行結果:例11-12(續(xù))11.5文件流——11.5.411.6.1字符串流的建立字符串流以內存中的一個字符串緩沖區(qū)為輸入/輸出對象。istringstream是字符串輸入流類,ostringstream是字符串輸出流類,stringstream是字符串輸入/輸出流類。字符串流有一個需要兩個參數(shù)的構造函數(shù),第一個通過一個字符串為緩沖區(qū)提供初始數(shù)據(jù),第二個用于指定打開模式。對應于ostringstream、istringstream和stringstream這三種不同的字符串流,第二個參數(shù)的默認值分別是:ios_base::out、ios_base::in和ios_base::out
|
ios_base::in。6911.6字符串流11.6.1字符串流的建立字符串流以內存中的一個字符串緩沖區(qū)11.6.1字符串流的建立(續(xù))字符串流還有一個只需要一個參數(shù)的構造函數(shù),該參數(shù)與前述構造函數(shù)的第二個構造函數(shù)相同,用于指定打開模式,也有默認值。下面是創(chuàng)建字符流的幾個例子:ostringstreamost1(“Thisisastring”,ios_base::app);ostringstreamost2;istringstreamist1(“Thisisastring”);istringstreamist2;stringstreamst;7011.6字符串流11.6.1字符串流的建立(續(xù))字符串流還有一個只需要一個參11.6.2字符串流的緩沖區(qū)操作字符串流除了可以用rdbuf函數(shù)訪問和設置緩沖區(qū)外,還有一個更方便的str函數(shù),它把緩沖區(qū)中的數(shù)據(jù)視為一個字符串:stringstr()const;
返回緩沖區(qū)中的字符串voidstr(conststring&str);
設置緩沖區(qū)中的字符串7111.6字符串流11.6.2字符串流的緩沖區(qū)操作字符串流除了可以用rdbu例11-13:函數(shù)wordPicker提取輸入流中的每個詞,并按原來的順序顯示輸出,但用逗號作為詞之間的分隔符7211.6字符串流——11.6.2字符串流的緩沖區(qū)操作例11-13:函數(shù)wordPicker提取輸入流中的每個詞,#include<iostream>#include<sstream>usingnamespacestd;
voidwordPicker(istream&is){ stringword; while(is>>word)cout<<word<<','; cout<<endl;}intmain(){ istringstreamsrc("Thisisastring"); wordPicker(src); src.clear(); //清除“eof”,將狀態(tài)置為“good” src.str(“Thisisanotherstring”);//用參數(shù)字符串替換緩沖區(qū) wordPicker(src);cout<<“Keyinsomewords:”; wordPicker(cin);cout<<endl; return0;}7311.6字符串流——11.6.2字符串流的緩沖區(qū)操作例11-13(續(xù))#include<iostream>7311.6字符串流—運行結果:This,is,a,string,This,is,another,string,Keyinsomewords:ThisisthethirdstringThis,is,the,third,string,^Z例11-13(續(xù))11.6字符串流——11.6.2字符串流的緩沖區(qū)操作74運行結果:例11-13(續(xù))11.6字符串流——11.6.11.7針對自定義類型重載>>和<<可以針對自定義類型重載提取運算符>>和插入運算符<<,單只可能作為全局函數(shù)重載。重載這兩個運算符函數(shù)須使用如下原形:istream&operator>>(istream&is,<類名>&obj);
ostream&operator<<(ostream&os,<類名>obj);其中ostream的第二個參數(shù)也可以是const<類名>&obj。7511.7針對自定義類型重載>>和<<可以針對自定義類型重載例11-14:對自定義類DoubleArray重載>>和<<,用以完成數(shù)組的輸入和輸出7611.7針對自定義類型重載例11-14:對自定義類DoubleArray重載>>和<<//DoubleArray.h#include<iostream>usingnamespacestd;
classDoubleArray{ intmin_index; intmax_index; double*data;public: DoubleArray(intmin,intmax); DoubleArray(intmax); DoubleArray(){delete[]data;}; double&operator[](intindex)const; intgetMinIndex()const{returnmin_index;} intgetMaxIndex()const{returnmax_index;}};
istream&operator>>(istream&is,DoubleArray&a);ostream&operator<<(ostream&os,constDoubleArray&a);7711.7針對自定義類型重載例11-14(續(xù))//DoubleArray.h7711.7針對自定義類型重//DoubleArray.cpp#include"DoubleArray.h"DoubleArray::DoubleArray(intmin,intmax):min_index(min),max_index(max){if(min>max){//若下標范圍的下界大于上界,顯示出錯信息并退出 cout<<"Errorindexrange"; exit(1);}data=newdouble[max_index-min_index+1];}
DoubleArray::DoubleArray(intmax):min_index(0),max_index(max){ data=newdouble[max_index+1];}7811.7針對自定義類型重載例11-14(續(xù))//DoubleArray.cpp7811.7針對自定義類double&DoubleArray::operator[](intindex)const{ if(index<min_index||index>max_index){//若下標越界,顯示出錯信息并退出 cout<<"Indexoutofrange"; exit(1); } returndata[index-min_index];}
istream&operator>>(istream&is,DoubleArray&a){ for(inti=a.getMinIndex();i<=a.getMaxIndex();i++) is>>a[i]; returnis;}
ostream&operator<<(ostream&os,constDoubleArray&a){ for(inti=a.getMinIndex();i<=a.getMaxIndex();i++)os<<a[i]<<''; returnos;}7911.7針對自定義類型重載例11-14(續(xù))double&DoubleArray::operator例11-14(續(xù))//11-14.cpp#include"DoubleArray.h"intmain(){ DoubleArrayx(3,8); cout<<"請輸入"<<(x.getMaxIndex()-x.getMinIndex()+1)<<"個數(shù)據(jù):"; cin>>x; cout<<"剛輸入的數(shù)據(jù)是:"; cout<<x<<endl;
return0;}8011.7針對自定義類型重載例11-14(續(xù))//11-14.cpp8011.7針對自運行結果:請輸入6個數(shù)據(jù):123456剛輸入的數(shù)據(jù)是:123456例11-14(續(xù))11.7針對自定義類型重載81運行結果:例11-14(續(xù))11.7針對自定義類型重載81小結本章我們主要學習了如何使用流進行輸入/輸出。首先介紹了流的基本概念,其次講述了無格式和有格式的輸入/輸出方法和注意事項,然后介紹了流在文家輸入/輸出中的應用和字符串流,最后介紹了插入運算符<<和提取運算符>>在自定義類型中的重載。82小結本章我們主要學習了如何使用流進行輸入/輸出。首先介紹了流第十一章
輸入/輸出流第十一章輸入/輸出流學習目標掌握C++輸入/輸出流(I/O流)的基本概念;能夠在輸入/輸出中進行基本的格式控制;掌握文件的I/O操作。84學習目標掌握C++輸入/輸出流(I/O流)的基本概念;2目錄11.1C++輸入輸出流的概念11.1.1什么是輸入輸出流11.1.2流類庫的頭文件11.1.3預定義流對象11.1.4I/O流庫的類體系11.1.5輸出流舉例11.1.6輸入流舉例85目錄11.1C++輸入輸出流的概念3目錄(續(xù))11.2無格式的輸入/輸出11.2.1無格式輸入11.2.2無格式輸出11.3有格式的輸入/輸出11.3.1默認的輸入/輸出格式11.3.2格式標志的設置11.3.3格式控制操縱符11.4I/O流的狀態(tài)86目錄(續(xù))11.2無格式的輸入/輸出4目錄(續(xù))11.5文件流11.5.1文件的概念11.5.2文件流的建立11.5.3文件流的關閉11.5.4兩種特殊的文件流11.6字符串流11.6.1字符串流的建立11.6.2字符串流的緩沖區(qū)操作11.7針對自定義類型重載>>和<<87目錄(續(xù))11.5文件流511.1.1什么是輸入/輸出流C++將數(shù)據(jù)從一個對象到另一個對象的流動抽象為“流”。在程序中,“流”具體體現(xiàn)為一個對象,負責在數(shù)據(jù)生產(chǎn)者和數(shù)據(jù)消費者之間建立聯(lián)系,控制數(shù)據(jù)的流動。例如cin、cout就是兩個流對象。利用I/O流既可進行有格式輸入/輸出,也可進行無格式輸入/輸出。為了實現(xiàn)格式化的輸出,I/O流類庫提供了豐富的流操縱符,比如設置輸出域的寬度,設置輸出精度,設置填充字符等。8811.1
C++輸入輸出流的概念11.1.1什么是輸入/輸出流C++將數(shù)據(jù)從一個對象到另一11.1.2流類庫的頭文件<iostream>:
包括istream、ostream、iostream以及cin、cout、ceer和clog對象的定義,同時提供非格式化和格式化的I/O服務。針對標準設備的I/O操作,須包含之。<sstream>:
包括istringstream、ostringstream、stringstream的定義,要使用字符串流對象進行針對內存字符串空間的I/O操作,須包含此文件。<fstream>:
包括ifstream、ofstream、fstream的定義,要使用文件流對象進行針對磁盤文件的I/O操作,須包含此文件。<iomanip>:
包括setw、fixed等等操縱符的定義,利用操縱符進行格式化I/O操作,須包含之。8911.1
C++輸入輸出流的概念11.1.2流類庫的頭文件<iostream>: 711.11.1.3預定義流對象C++中一共有4個預定義流對象,它們的名稱及與之聯(lián)系的I/O設備如下:cin 標準輸入流對象,對應標準輸入設備
cout 標準輸出流對象,對應標準輸出設備
cerr 標準錯誤信息輸出流對象,對應標準出錯信息輸出設備
clog 標準錯誤信息輸出流對象,對應帶緩沖的標準出錯信息輸出設備這里提到的標準輸入設備和標準輸出設備是操作系統(tǒng)下的兩種虛擬設備,每種虛擬設備都與一種具體的設備相連接。通常情況下,標準輸入設備與鍵盤相連接,標準輸出設備與顯示器相連接,但可以重定向為與其他設備(如磁盤)。在程序中可以定義自己的流對象(稱為自定義流對象),以滿足特定輸入、輸出需求。9011.1
C++輸入輸出流的概念11.1.3預定義流對象C++中一共有4個預定義流對象,它11.1.4I/O流庫的類體系I/O流庫的類體系C++通過一系列的流類將不同類型數(shù)據(jù)的輸入/輸出操作封裝起來,以面向對象的方式規(guī)范各種輸入/輸出操作,提供了一套簡化的操作界面,使得不同類型的數(shù)據(jù)的輸入/輸出可以采用相同的語法格式。部分流類之間的繼承關系如圖。9111.1
C++輸入輸出流的概念11.1.4I/O流庫的類體系I/O流庫的類體系911.111.1.5輸出流舉例一個輸出流對象是信息流動的目標,最重要的三個輸出流是ostream、ostringstream和ofstream。ostream是通用輸出流類,cout、cerr和clog都是它的對象;ostringstream是字符串輸出流類,它將一片內存空間作為輸出設備;ofstream是文件輸出流類。9211.1
C++輸入輸出流的概念11.1.5輸出流舉例一個輸出流對象是信息流動的目標,最重例11-1:向標準設備輸出字符串#include<iostream>usingnamespacestd;intmain(){
char*word="helloworld!";
doublepi=3.1415926;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年洗車店停車場管理承包合同3篇
- 韶關廣東韶關仁化縣政府安排工作退役士兵競聘事業(yè)單位管理崗位考試筆試歷年參考題庫附帶答案詳解
- 健康血壓的保持方法
- 介紹我們的學校
- 交通運輸行業(yè)的人力資源管理
- 高溫工作環(huán)境安全防護
- 行星式球磨儀行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 2025年中國彈性質感涂料行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 二零二五年度新型材料抹灰工程勞務分包技術合同3篇
- 2025年度家庭園藝設計與養(yǎng)護服務合同規(guī)范4篇
- 2024電子商務平臺用戶隱私保護協(xié)議3篇
- 安徽省蕪湖市2023-2024學年高一上學期期末考試 英語 含答案
- 電力工程施工安全風險評估與防控
- 醫(yī)學教程 常見體表腫瘤與腫塊課件
- 內分泌系統(tǒng)異常與虛勞病關系
- 智聯(lián)招聘在線測評題
- DB3418T 008-2019 宣紙潤墨性感官評判方法
- 【魔鏡洞察】2024藥食同源保健品滋補品行業(yè)分析報告
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題及答案
- 鋼筋桁架樓承板施工方案
- 2024年駐村第一書記工作總結干貨3篇
評論
0/150
提交評論