日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

C++_IO类型_文件输入输出流_字符串流

發(fā)布時(shí)間:2024/7/5 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++_IO类型_文件输入输出流_字符串流 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IO類型

  • iostream: 用于窗口的輸入輸出
  • fstream: 用于文件讀寫
  • sstream :讀寫存儲(chǔ)在內(nèi)存中的string對(duì)象

注:他們繼承于istream與ostream,因此istream對(duì)象也可用于讀取ifstream, string對(duì)象, ostream對(duì)象同上; 并且iostream類型可在同一個(gè)流實(shí)現(xiàn)輸入輸出操作;.
IO對(duì)象不可復(fù)制賦值

ofstream out1,out2; out1=out2; //不支持 ofstream print(ofstream);//在形參傳遞過(guò)程中涉及到復(fù)制操作 out2=print(out2); //形參或返回類型不能為流類型,如果需要返回或傳遞IO對(duì)象,必須返回或傳遞該對(duì)象的指針或引用 //采用const修飾,那么就在讀寫過(guò)程中就不能改變IO對(duì)象狀態(tài)了,SO,不可用const修飾

IO條件狀態(tài)
條件狀態(tài)包含:

  • strm:badbit :被破壞的流
  • strm::failbit: 失敗的IO操作
  • strm::eofbit: 指出流已經(jīng)到達(dá)文件結(jié)束符
  • clear: 將流中狀態(tài)值重置為有效值
  • setstate: 添加指定條件(為strm::iostate類型)
    注:前三者都為iostate類型, IO類定義了3個(gè)iostate類型的常量值:badbit,failbit,eofbit

所有流對(duì)象都包含一個(gè)條件狀態(tài)成員,由setstate,clear(添加IO條件,將某個(gè)條件狀態(tài)設(shè)置為有效值)操作管理;該狀態(tài)成員為iostate類型,以二進(jìn)制(bit)形式使用.
流的狀態(tài)由bad,fail,eof,good操作提示,流正確時(shí)bad,fail,eof返回 false,good返回true
例:流狀態(tài)的查詢與控制

int i; while(cin>>i,!cin.eof()){if(cin.bad)throw runtime_error("流被破壞");if(cin.fail){cerr<<"數(shù)據(jù)錯(cuò)誤,重試";cin.clear(istream::failbit);continue;} }

當(dāng)同時(shí)使用多個(gè)狀態(tài)時(shí)可采用直接或運(yùn)算(滿足條件的二進(jìn)制位都變?yōu)?)

i.setstate(ifstream::badbit|ifstream::failbit); //同時(shí)將開啟流狀態(tài)成員

輸入輸出緩沖區(qū)管理
每個(gè)IO對(duì)象都具有一個(gè)緩沖區(qū),用于儲(chǔ)存程序讀寫數(shù)據(jù)
如下操作導(dǎo)致緩沖區(qū)內(nèi)容被刷新

  • 程序正常結(jié)束
  • 緩沖區(qū)已經(jīng)存滿
  • 使用操作符顯示刷新緩沖區(qū),例:endl,flush
  • 輸入操作完成,用unitbuf操作符設(shè)置流內(nèi)部狀態(tài)
  • 將輸入輸出流關(guān)聯(lián),在讀取時(shí)將刷新關(guān)聯(lián)的輸出緩沖區(qū)

注:unitbuf用于刷新所有輸出,當(dāng)程序不正常結(jié)束,不會(huì)刷新緩沖區(qū),系統(tǒng)不會(huì)在程序崩潰時(shí)自動(dòng)刷新緩沖區(qū)
輸入輸出關(guān)聯(lián)
IO對(duì)象具有tie函數(shù),用法如下:

cin.tie(&cout);//cin的任何操作都會(huì)刷新關(guān)聯(lián)的緩沖區(qū) ostream *old_tie=cin.tie(); cin.tie(0);//形參為0打破二者的綁定 cin.tie(old_tie);//重新關(guān)聯(lián)

文件輸入流與輸出流

  • ofstream: 輸出文件流,創(chuàng)建文件并向文件寫入信息
  • ifstream:輸入文件流,從文件讀取信息
  • fstream:同時(shí)具有ofstream與ifsteam的功能

文件操作時(shí),C++源代碼必須包含< iostream> < fstream>
打開文件
void open(const char *filename,ios::openmode mode);
第一個(gè)參數(shù)文件位置及文件名,第二個(gè)參數(shù)打開類型; open是文件流對(duì)象的成員函數(shù)
mode具有如下:

  • ios::app :在文件末尾添加內(nèi)容
  • ios::ate :文件打開后定向到末尾
  • ios::in :打開文件用于讀取
  • ios::out :打開文件用于輸入
  • ios:trunc :打開文件清空已存在的文件流(我的理解是覆蓋以前文件內(nèi)容,有不對(duì)的地方還請(qǐng)指出)

以上介紹的標(biāo)志可以結(jié)合使用,out,trunc,app只能用于指定與ofstream或fstream對(duì)象關(guān)聯(lián)的文件,默認(rèn)打開形式只有in,out

ofstream outfile; outfile.open("data.txt",ios::in|ios::trunc); //或者 fstream file; //fstream對(duì)象默認(rèn)打開方式為in和out同時(shí)打開 file.open("data.txt",ios::in|ios::out);

關(guān)閉文件: 流對(duì)象.close();
寫入文件: 流插入運(yùn)算符(<<)
讀取文件: 流提取符(>>)
實(shí)例操作:

#include<iostream> #include<fstream> using namespace std; int main(){char data[100];ofstream outfile;outfile.open("記錄.txt",ios::app); //此處可做修改cin.getline(data,100);//接受一個(gè)字符串,可以接收空格,將其存儲(chǔ)到數(shù)組中,最大存儲(chǔ)99個(gè)字符outfile<<data;outfile.close();ifstream infile;infile.open("記錄.txt");infile>>data;cout<<data<<endl; infile.close();return 0; }

字符串流

標(biāo)準(zhǔn)庫(kù)定義三種類型字符串流

  • istringstream: istream派生,提供讀string
  • ostringstream: ostream派生,提供寫string
  • stringstream: iostream派生,提供讀寫
    注:必須包含sstream頭文件

stringstream的特定操作

  • stringstream strm: 創(chuàng)建對(duì)象
  • stringstream strm(s): 用string對(duì)象s初始化strm;
  • strm.str(): 返回strm中存儲(chǔ)的string類型對(duì)象
  • strm.str(s): 將s復(fù)制給strm,返回void

ostringstream可用于格式轉(zhuǎn)換
istringstream自動(dòng)將數(shù)值類型的字符轉(zhuǎn)化為相應(yīng)數(shù)值

int i=1,j=2; ostringstream s1; s1<<i<<"i"<<j<<"j";//現(xiàn)在str內(nèi)存儲(chǔ)的是"12"的字符串 istringstream s2(s1.str());//用s1初始化s2 string dump; s2>>i>>dump>>j>>dump;//接收分割效果的字符串,必須保證存儲(chǔ)操作與讀取操作格式一致 cout<<i<<j;

注:上述操作中注意需要將string對(duì)象分割才能得到,空白符與換行符會(huì)被忽略

總結(jié)

以上是生活随笔為你收集整理的C++_IO类型_文件输入输出流_字符串流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。