C++的輸入輸出流總結(jié)

c++? I/O(不包括文件)

http://www.cnblogs.com/chinazhangjie/archive/2010/08/19/1803057.html


C++支持兩種I/O,1逗栽、C語言繼承而來 2缝呕、有C++定義的面向?qū)ο驣/O系統(tǒng)砰蠢。

1煎殷、int getchar(void);询枚,返回一個整數(shù)值嵌施,也可以指定這個值為char變量饲化,行緩沖輸入(回車鍵結(jié)束)。如果有錯吗伤,返回EOF吃靠。

2、int putchar(int c);? 輸出低位字節(jié)足淆,放回被寫入的字符巢块,失敗則返回EOF,

3巧号、int getch(void);

?? int getche(void);

4族奢、char* gets(char* str);遇到回車鍵結(jié)束,不包含回車鍵丹鸿,空結(jié)束符放在串尾越走。注意:沒有邊界檢查,有可能 數(shù)組越界

5靠欢、int puts(const char* str);只針對字符串打印到屏幕上廊敌,相對于printf的開銷小,空間少门怪,速度快不能輸出數(shù)字或者是格式轉(zhuǎn)換骡澈。操作失敗返回EOF,否則返回非負(fù)值掷空。

6肋殴、int printf(const char* control_string,...);

(控制串)有兩種類型項(xiàng)目組成第一類由將打印在屏幕上的字符串組成囤锉,第二類包括自定義其后變元顯示方式的格式限定符。格式限定符以一個百分號開頭护锤,后跟格式化碼嚼锄,變元列表中的變元數(shù)與格式限定符完全相等,格式限定符與變元按順序從左到右匹配蔽豺。

7区丑、int scanf(const char* control_string...);

可以讀入各種內(nèi)嵌類型并自動將其轉(zhuǎn)換為適當(dāng)?shù)母袷健7祷爻晒Φ馁x予了一個值的數(shù)據(jù)項(xiàng)修陡。如果出現(xiàn)一個錯誤沧侥,scanf()返回EOF∑茄唬控制串包括三類字符:

a宴杀、格式限定符 b、空白字符 c拾因、非空白字符

格式限定符以百分號開始旺罢,告訴scanf()下一步要讀的數(shù)據(jù)是什么類型。

C++內(nèi)置流:

cin?? 標(biāo)準(zhǔn)輸入? 鍵盤

cout? 標(biāo)準(zhǔn)輸出? 屏幕

cerr? 標(biāo)準(zhǔn)錯誤輸出 屏幕

clog? cerr的緩沖版本 屏幕

cin绢记、cout扁达、cerr和C的stdin、stdout蠢熄、stderr相對應(yīng)跪解。

C++附加流:win、wout签孔、werr叉讥、wlog它們都是款字符版本的標(biāo)準(zhǔn)流,寬字符類型為wchar_t饥追,一般為16位图仓。

29、fmtflags setf(fmtflags flags);

該函數(shù)返回格式標(biāo)記先前的并開啟又flags指定的那些標(biāo)記但绕。

eg:

cout.setf(ios::showpoint);

cout.setf(ios::showpos);

或者cout.setf(ios::showpoint | ios::showpos);

30救崔、void unsetf(fmtflags flags);

flags指定的標(biāo)記被清除

eg:

cout.setf(ios::uppercase | ios::scientfic);

cout.unsetf(ios::uppercase);

31、fmtflags flags();

返回每個格式標(biāo)記的當(dāng)前位置壁熄。

32帚豪、fmtflags flags(fmtflags f);

設(shè)置某個流的所有標(biāo)記碳竟。

eg:

ios::fmtflags f = ios::showpos | ios::showbase | ios::oct | ios::right;

cout.flags(f);//set all flags

33草丧、streamsize width(streamsize w);

修改最小域?qū)挘瑆是將要改成的域?qū)捰ㄎΓ惹暗挠驅(qū)挿祷亍?/p>

34昌执、streamsize precision(streamsize p);

當(dāng)輸出浮點(diǎn)型時烛亦,可以使用precision()函數(shù)來確定數(shù)字的精確位數(shù)。

35懂拾、char fill(char ch);

填充指定字符煤禽,默認(rèn)情況下是空格

C++操作算子

操作算子? 用途??? 輸入/輸出

boolapha? 開啟boolapha標(biāo)記 輸入/輸出

dec??? 開啟dec標(biāo)記?? 輸出

endl?? 輸出一個換行符并刷新流 輸出

ends?? 輸出一個null?? 輸出

fixed?? 開啟fixed標(biāo)記?? 輸出

flush?? 刷新一個流??? 輸出

hex??? 開啟hex標(biāo)記??? 輸出/輸入

internal? 開啟internal標(biāo)記? 輸出

left?? 開啟left標(biāo)記?? 輸出

noboolalpha? 關(guān)閉noboolalpha標(biāo)記? 輸入/輸出

noshowbase? 關(guān)閉showbase標(biāo)記? 輸出

noshowpoint? 關(guān)閉showpoint標(biāo)記? 輸出

noshowpos? 關(guān)閉showpos標(biāo)記?? 輸出

noskipws? 關(guān)閉skipws標(biāo)記?? 輸入

nounitbuf? 關(guān)閉unitbuf標(biāo)記?? 輸出

nouppercase? 關(guān)閉uppercase標(biāo)記? 輸出

oct??? 開啟oct標(biāo)記??? 輸入/輸出

resetiosflags(fmtflags f) 關(guān)閉f中指定的標(biāo)記 輸入/輸出

right??? 開啟right標(biāo)記?? 輸出

scientific? 開啟scientific標(biāo)記? 輸出

setbase(int base) 將基數(shù)設(shè)為base? 輸入/輸出

setfill(int ch)?? 將填充字符設(shè)置為ch 輸出

setiosflags(fmtflags f)開啟f中指定的標(biāo)記 輸入/輸出

setprecision(int p)? 設(shè)置字符精度? 輸出

setw(int w)?? 將域?qū)捲O(shè)置為w? 輸出

showbase?? 開啟showbase標(biāo)記 輸出

showpoint?? 開啟showpoint標(biāo)記 輸出

showpos??? 開啟showpos標(biāo)記? 輸出

skipws???? 開啟skipws標(biāo)記? 輸入

unitbuf??? 開啟unitbuf標(biāo)記? 輸出

uppercase?? 開啟uppercase標(biāo)記 輸出

ws???? 跳過開始的空格? 輸入

注意:在訪問帶參數(shù)的操算子,必須在程序中包括<iomanip>

創(chuàng)建自己的插入器:

ostream& operator<<(ostream& stream,class_type obj)

{

?//body of inserter

?return stream;

}

創(chuàng)建自己的析取器

istream& operator>>(istream& stream,class_type obj)

{

?//body of extractor

?return stream;

}

C++文件的輸入和輸出<fstream>

創(chuàng)建一個流

ifstream in;//input

ofstream out;//output

fstream io;//input and output

36岖赋、

void ifstream::open(const char*filename,ios::opennode mode = ios::in);

void ofstream::open(const char*filename,ios::openmode mode = ios::out | ios::trunc);

void fstream::open(const char* filename,ios::openmode mode = ios::in | ios::out);

openmode:

ios::app 使所有輸出到相應(yīng)文件的內(nèi)容都添加到文件末尾檬果,該值只能用于具有輸出功能的文件。

ios::ate? 使得在打開文件時能夠定位到文件末尾

ios::binary? 可以以二進(jìn)制文件打開唐断,默認(rèn)情況下选脊,所有文件都以文本方式打開。

ios::in? 指定為輸入

ios::out 制定我輸出

ios::trunc 銷毀具有相同名字的先前文件的內(nèi)容脸甘,并且將文件長度截?cái)酁?恳啥,當(dāng)使用ofstream創(chuàng)建一個輸出流時任何先前存在的具有該文件名的文件將被自動截?cái)?/p>

eg:

if(!mystream)

{

?cout<<"Cannot open file.\n";

?//handdle error

}

if(!mystream.is_open())

{

?cout<<"Cannot open file.\n";

?//handdle error

}

37、istream &get(char &ch);

?ostream &put(char &ch);

eg:

while(in.get(ch))

?cout<<ch;

38丹诀、istream& read(char* buf,streamsize num);

?ostream& write(const char* buf,streamsize num);

read()函數(shù)從流中讀取num字符并將他們放入由buf所指的緩沖區(qū)钝的。write()函數(shù)把num字符從buf所指的緩沖區(qū)寫入調(diào)用流,streamsize是由C++庫定義的類型--是某種類型铆遭,它可以存儲能夠被任何一種I/O操作轉(zhuǎn)換的最大字符數(shù)硝桩。

39、streamsize gcount();

檢查已經(jīng)有多少字符被讀取

40枚荣、get()的重載版本:

istream& get(char* buf,streamsize num);

把字符讀入由buf指向的數(shù)組亿柑,直到讀取到第num-1個字符,發(fā)現(xiàn)了一個換行符或者遇到了文件尾棍弄。指針buf所指向的數(shù)組以null字符結(jié)束望薄。

istream& get(char* buf,streamsize num,char delim);

把字符讀入由buf指向的數(shù)組,直到讀取到第num-1個字符呼畸,發(fā)現(xiàn)了由delim指定的字符或者是遇到了文件尾痕支。指針buf所指向的數(shù)組以null字符結(jié)束。如果在輸入流中遇到分隔符字符蛮原,則不會提取該字符卧须。

int get();

返回相應(yīng)流的下一個字符,如果遇到文件尾儒陨,則返回EOF花嘶。get()函數(shù)的這種形式類似于C的函數(shù)

41、istream& getline(char* buf,streamsize num);

把字符讀入由buf指向的數(shù)組蹦漠,直到讀取到第num-1個字符椭员,發(fā)現(xiàn)了一個換行符或者遇到了文件尾。指針buf所指向的數(shù)組以null字符結(jié)束笛园。如果在出輸入流中遇到換行符是隘击,則提取該字符侍芝,但是不會將其放入buf

?istream& getline(char* buf,streamsize num,char delim);

把字符讀入由buf指向的數(shù)組,直到讀取到第num-1個字符埋同,發(fā)現(xiàn)了由delim指定的字符或者是遇到了文件尾州叠。指針buf所指向的數(shù)組以null字符結(jié)束。如果在輸入流中遇到分隔符字符凶赁,則提取該字符咧栗,但是不將其放入buf

42、bool eof();

到達(dá)文件尾時虱肄,該函數(shù)返回true楼熄,否則返回false

43、istream & ignore(streamsize num = 1,int_type delim = EOF);

該函數(shù)讀取和放棄字符浩峡,直到num個字符被忽略(默認(rèn)值為1)或者遇到delim指定為字符(默認(rèn)值為EOF)

44可岂、int_type peek();

返回流中的下一個字符,如果遇到文件尾翰灾,則返回EOF(int_type 被定義為某種整數(shù)型類型)

45缕粹、istream& putback(char c);

返回流中的最后一個字符,c是讀取最后一個字符

46纸淮、ostream& flush();

在緩沖區(qū)被寫滿數(shù)據(jù)前強(qiáng)行將數(shù)據(jù)寫到磁盤

47平斩、istream& seekg(off_type offset,seekdir origin);

?ostream& seekp(off_type offset,seekdir origin);

off_type是ios定義的一個整數(shù)類型,可以包含offset具有的最大有效值咽块,seekdir是一個ios定義的枚舉類型绘面,用來決定查找方式。seekg()函數(shù)可以把相關(guān)文件當(dāng)前的獲取指針從指定origin出偏移offset個字符侈沪,origin必須是一下三個值中的一個

ios::beg?? 文件頭

ios::cur? 當(dāng)前位置

ios::end? 文件尾

seekp()函數(shù)可以把相關(guān)文件當(dāng)前的獲取指針從指定origin出偏移offset個字符揭璃,origin必須是以上三個值之一

48、pos_type tellg();

?pos_type tellp();

確定每一個文件指針的位置亭罪。pos_type是ios定義的類型瘦馍,它存儲函數(shù)可以返回最大值。

I/O狀態(tài):保存在一個iostate類型的對象中应役,它是ios定義的枚舉類型情组,包括一下成員:

ios::goodbit?? 無錯誤位設(shè)置

ios::eofbit??? 當(dāng)遇到文件尾時為1;否則為0

ios::failbit?? 當(dāng)出現(xiàn)非致命錯誤時為1箩祥,否則為0

ios::badbit??? 當(dāng)出現(xiàn)致命的I/O錯誤時為1院崇;否則為0

獲得I/O狀體的方法:


a、iostate rdstate();

b袍祖、bool bad();

?? bool eof();

?? bool fail();

?? bool good();

一旦出現(xiàn)錯誤底瓣,或許在程序繼續(xù)運(yùn)行之前需要清除該錯誤,為此盲泛,可以使用clear()函數(shù)

void clear(iostate flags = ios::goodbit);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末濒持,一起剝皮案震驚了整個濱河市键耕,隨后出現(xiàn)的幾起案子寺滚,更是在濱河造成了極大的恐慌柑营,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件村视,死亡現(xiàn)場離奇詭異官套,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚁孔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門奶赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杠氢,你說我怎么就攤上這事站刑。” “怎么了鼻百?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵绞旅,是天一觀的道長。 經(jīng)常有香客問我温艇,道長因悲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任勺爱,我火速辦了婚禮晃琳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘琐鲁。我一直安慰自己卫旱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布围段。 她就那樣靜靜地躺著誊涯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒜撮。 梳的紋絲不亂的頭發(fā)上暴构,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音段磨,去河邊找鬼取逾。 笑死,一個胖子當(dāng)著我的面吹牛苹支,可吹牛的內(nèi)容都是我干的砾隅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼债蜜,長吁一口氣:“原來是場噩夢啊……” “哼晴埂!你這毒婦竟也來了究反?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤儒洛,失蹤者是張志新(化名)和其女友劉穎精耐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琅锻,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卦停,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恼蓬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊完。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖处硬,靈堂內(nèi)的尸體忽然破棺而出小槐,到底是詐尸還是另有隱情,我是刑警寧澤荷辕,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布凿跳,位于F島的核電站,受9級特大地震影響桐腌,放射性物質(zhì)發(fā)生泄漏拄显。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一案站、第九天 我趴在偏房一處隱蔽的房頂上張望躬审。 院中可真熱鬧,春花似錦蟆盐、人聲如沸承边。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽博助。三九已至,卻和暖如春痹愚,著一層夾襖步出監(jiān)牢的瞬間富岳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工拯腮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窖式,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓动壤,卻偏偏與公主長得像萝喘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • C/C++輸入輸出流總結(jié) 前兩天寫C++實(shí)習(xí)作業(yè)阁簸,突然發(fā)現(xiàn)I/O是那么的陌生爬早,打了好長時間的文件都沒有打開,今天終...
    LuckTime閱讀 1,721評論 0 6
  • [轉(zhuǎn)]C/C++ 文件讀寫操作總結(jié) 在編程的過程中启妹,文件的操作是一個經(jīng)常用到的問題筛严,在C++Builder中,可以...
    天之道天知道閱讀 5,194評論 0 7
  • 原文出自【比特網(wǎng)】翅溺,轉(zhuǎn)載請保留原文鏈接:http://soft.chinabyte.com/database/46...
    petit_prince閱讀 7,652評論 0 2
  • 1. C++中各種輸入輸出函數(shù)總結(jié) 與輸入輸出流操作相關(guān)的類關(guān)系 2. 鍵盤輸入輸出函數(shù) 2.1. scanf函數(shù)...
    不學(xué)習(xí)不快樂閱讀 534評論 0 0
  • 臨海 起的有點(diǎn)晚脑漫,收拾了一下髓抑,已經(jīng)11點(diǎn)了咙崎, 本來打算是,中午b特去醫(yī)院的時候吨拍,我和他一起出發(fā)我逛一下傳說中的紫陽...
    HOHO_ec7b閱讀 42評論 0 0