欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c++中的基本IO類(lèi)型是什么

這篇文章主要講解了“c++中的基本IO類(lèi)型是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“c++中的基本IO類(lèi)型是什么”吧!

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到化德網(wǎng)站設(shè)計(jì)與化德網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋化德地區(qū)。

引言

c++不直接處理輸入和輸出,而是通過(guò)標(biāo)準(zhǔn)庫(kù)中的類(lèi)型處理IO。IO的設(shè)備可以是文件、控制臺(tái)、string。c++主要定義了三種IO類(lèi)型,分別被包含在iostreamfstreamsstream頭文件中。

為了支持使用寬字符的語(yǔ)言,標(biāo)準(zhǔn)庫(kù)定義了一組類(lèi)型和對(duì)象操縱wchar_t類(lèi)型的數(shù)據(jù)。

以下是這三種IO庫(kù)類(lèi)型以及頭文件:

  • iostream頭文件

istream(寬字符版本wistream),從流讀取數(shù)據(jù)。
ostream (寬字符版本wostream),向流寫(xiě)入數(shù)據(jù)。
iostream(寬字符版本wiostream),讀寫(xiě)流。

  • fstream頭文件

ifstream(寬字符版本wifstream),從文件讀取數(shù)據(jù)。
ofstream (寬字符版本wofstream),向文件寫(xiě)入數(shù)據(jù)。
fstream(寬字符版本wfstream),讀寫(xiě)文件。

  • sstream頭文件

istringstream(寬字符版本wistringstream),從string讀取數(shù)據(jù)。
ostringstream (寬字符版本wostringstream),向string寫(xiě)入數(shù)據(jù)。
stringstream(寬字符版本wstringstream),讀寫(xiě)string。

設(shè)備類(lèi)型和字符大小不會(huì)影響我們要執(zhí)行的IO操作。得益于繼承機(jī)制,以上類(lèi)型都可以使用>><<運(yùn)算符以及getline()函數(shù)。

IO類(lèi)型的通用特性

IO對(duì)象不能拷貝或賦值

istream is1,is2;
is1 = is2; //錯(cuò)誤,流對(duì)象不能賦值
istream is3(is1); //錯(cuò)誤,流對(duì)象不能拷貝

由于無(wú)法拷貝IO對(duì)象,因此不能將形參或返回類(lèi)型設(shè)置為流類(lèi)型。通常使用引用方式傳遞和返回流。但傳遞和返回的引用不能是const的,因?yàn)樽x寫(xiě)IO對(duì)象會(huì)改變IO對(duì)象的狀態(tài),也就是改變了IO對(duì)象。

IO對(duì)象的狀態(tài)信息

IO類(lèi)定義了一些函數(shù)和標(biāo)志位,幫助我們檢查和操縱流的狀態(tài):

  • strm::iostate是一種類(lèi)型,這種類(lèi)型就像一串二進(jìn)制位串,每個(gè)二進(jìn)制位串指出了流的狀態(tài)。(strm為引言中的任意一種IO類(lèi)型)。

  • eof()函數(shù)用于在IO對(duì)象上調(diào)用,如cin.eof()。如果流檢測(cè)到eof(文件結(jié)束標(biāo)志),該函數(shù)返回true。

  • fail()函數(shù)使用同上。如果流處于崩潰或IO操作失敗的狀態(tài),返回true。

  • bad()函數(shù)使用同上。如果流處于崩潰狀態(tài),返回true。

  • good()函數(shù)使用同上。如果流處于有效狀態(tài),返回true。clear()函數(shù)使用同上。將IO對(duì)象中的所有條件狀態(tài)為復(fù)位,流的狀態(tài)變?yōu)橛行顟B(tài),返回void。

  • setstate(flags),將IO對(duì)象的狀態(tài)為按flags(類(lèi)型為strm::iostate)指示的那樣置位。

  • rdstate()函數(shù)用于在IO對(duì)象上調(diào)用,讀取IO對(duì)象的狀態(tài)位,返回類(lèi)型為strm::iostate

一旦流發(fā)生錯(cuò)誤,這個(gè)流上的后續(xù)IO操作都會(huì)失敗,因此最好在使用流之前檢查它是否處于良好狀態(tài)。如

// 如果輸入成功,流保持有效狀態(tài),條件為真
while(cin >> word){
    //讀操作成功,其他操作。
}

輸出緩沖

所有輸出流都管理一個(gè)緩沖區(qū),用來(lái)保存程序讀寫(xiě)的數(shù)據(jù)。

cout << "Hello World!";

串"Hello World!"可能被立即打印出來(lái),也可能被操作系統(tǒng)保存在緩沖區(qū),隨后打印。

以下原因可以刷新緩沖(即真正將數(shù)據(jù)輸出到目標(biāo)設(shè)備或文件中):

  • 程序正常結(jié)束,自動(dòng)刷新。

  • 緩沖區(qū)滿(mǎn)時(shí),自動(dòng)刷新。

  • 可以使用操作符endlflushends手動(dòng)刷新緩沖區(qū)(只作用一次輸出)。

cout << "1" << endl; //字符串后添加換行,然后刷新緩沖區(qū)
    cout << "2" << flush; //僅刷新緩沖區(qū)
    cout << "3" << ends;  //字符串后添加一個(gè)空字符,然后刷新緩沖區(qū)。

通過(guò)操作符unitbuf設(shè)置自動(dòng)刷新。不同于endlflushends只作用于一次輸出,設(shè)置了unitbuf后的輸出流每輸出一次都會(huì)自動(dòng)刷新緩沖區(qū)。

cout << unitbuf;//下面的語(yǔ)句每執(zhí)行一次輸出,就刷新一次緩沖區(qū)。
    cout << "1"; //輸出"1",自動(dòng)刷新緩沖區(qū)
    cout << "2"; //輸出"2",自動(dòng)刷新緩沖區(qū)
    cout << "3"; //輸出"3",自動(dòng)刷新緩沖區(qū)
    cout << "4"; //輸出"4",自動(dòng)刷新緩沖區(qū)
    ...
    cout << "nounitbuf"; //回到流默認(rèn)的緩沖方式

關(guān)聯(lián)流。讀寫(xiě)被關(guān)聯(lián)的流時(shí),關(guān)聯(lián)到的流的緩沖區(qū)會(huì)被刷新(tie()函數(shù)括號(hào)里面的是關(guān)聯(lián)到的流,調(diào)用tie()的流是被關(guān)聯(lián)的流)。cout 和 cin默認(rèn)關(guān)聯(lián)在一起,使用cin讀取數(shù)據(jù)時(shí),cout的緩沖區(qū)被刷新。

 cout << "Fuck you!"; //沒(méi)有指定操作符,cout默認(rèn)不刷新,該語(yǔ)句執(zhí)行完后"Fuck you!"可能立即被輸出到屏幕,也可能稍后被輸出。
    int i;
    cin >> i; //cout的緩沖區(qū)被刷新,此時(shí)"Fuck you!"一定已經(jīng)真正輸出(可能在之前就已經(jīng)真正輸出,此時(shí)刷新緩沖區(qū)等于什么都沒(méi)做)。

使用tie()函數(shù)關(guān)聯(lián)流和解除關(guān)聯(lián):

 cin.tie(&cout); //有參數(shù)的tie(),參數(shù)為指向流的指針,且指針不為空,此時(shí)建立關(guān)聯(lián)。
    cin.tie(nullptr); //有參數(shù)的tie(),且指針為空,此時(shí)解除cin和其他流的關(guān)聯(lián)。
    cin.tie(); //無(wú)參tie(),返回指向cin當(dāng)前關(guān)聯(lián)到的流的指針。

Note:

若程序崩潰即異常終止,輸出緩沖區(qū)不會(huì)被刷新,換言之,緩沖區(qū)中的數(shù)據(jù)可能并沒(méi)有真正被輸出到文件或設(shè)備。

文件IO

創(chuàng)建文件流

前面所過(guò),所有IO類(lèi)型都可以使用>>、 <<getline(),除此之外,文件IO還有一些特有的操作。

創(chuàng)建文件流:

 fstream fstrm1; //創(chuàng)建未綁定文件的文件流
    fstream fstrm2(s1); //創(chuàng)建綁定到指定文件s1的文件流(自動(dòng)調(diào)用open())。s1是string或指向c風(fēng)格字符串的指針。
    //fstream fstrm3(s2, mode); 與第二條語(yǔ)句類(lèi)似,但指定打開(kāi)文件的模式。

Note:

當(dāng)一個(gè)fstream的作用域內(nèi)的代碼執(zhí)行完畢,fstream關(guān)聯(lián)的文件被自動(dòng)關(guān)閉,即fstream對(duì)象被銷(xiāo)毀時(shí),close()會(huì)自動(dòng)調(diào)用。

open和close

使用open打開(kāi)文件,close關(guān)閉文件。對(duì)一個(gè)已經(jīng)打開(kāi)的文件調(diào)用open會(huì)失敗,并且failbit被置位。

string file1 = "qq.dat";
    ifstream ifs;
    ifs.open(file1);
    //讀取操作
    ifs.close();

文件模式mode

常用的文件模式mode如下:

  • in 只讀方式打開(kāi)文件

  • out 以寫(xiě)方式打開(kāi)文件

  • app 每次寫(xiě)操作在文件末尾進(jìn)行

  • ate 打開(kāi)文件后立即定位到文件末尾

  • trunc 截?cái)辔募摧敵鰰?huì)覆蓋文件中的原有數(shù)據(jù)。

  • binary 以二進(jìn)制方式打開(kāi)文件

同時(shí)指定多個(gè)模式時(shí)使用|分隔:

ofstream ofs("file1", ofstream::out | ofstream::app);

Note:

out模式隱含trunc即覆蓋原文件,若要在原文件末尾添加數(shù)據(jù),則需要顯式指明app模式。

若沒(méi)有指定任何模式,則使用默認(rèn)模式。

string IO

stringstream獨(dú)有的操作如下:

 sstream strm;   //sstream為sstream頭文件中定義的類(lèi)型,具體可以是istringstream等。
    sstream strm(s); //建立一個(gè)sstream對(duì)象,保存字符串s的一個(gè)拷貝。
    strm.str(); //返回strm保存的string的拷貝。
    strm.str(s); //將string s拷貝到strm。

感謝各位的閱讀,以上就是“c++中的基本IO類(lèi)型是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)c++中的基本IO類(lèi)型是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:c++中的基本IO類(lèi)型是什么
網(wǎng)站路徑:http://chinadenli.net/article38/gepesp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站App設(shè)計(jì)電子商務(wù)網(wǎng)站收錄網(wǎng)站導(dǎo)航搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化