免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
C/C++輸入輸出流總結(jié)


前兩天寫C++實(shí)習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生,打了好長(zhǎng)時(shí)間的文件都沒(méi)有打開(kāi),今天終于有點(diǎn)時(shí)間了,決定找本書,好好整理一下,和大家共享。

C++ I/O

C++支持兩種I/O,第一種是從C語(yǔ)言繼承來(lái)的,一種是由C++定義的面向?qū)ο驣/O系統(tǒng)。

1、int getchar(void);返回一個(gè)整數(shù)值,也可以指定這個(gè)值為char變量,因?yàn)檫@個(gè)字符包含于低位字節(jié)中(高位字節(jié)通常為0),如果有錯(cuò),getchar()返回EOF。但是他有一個(gè)潛在的問(wèn)題,正常情況下,getchar()緩存輸入,直到鍵入了回車鍵(這個(gè)大家應(yīng)該深有體會(huì),就是getchar()貌似只認(rèn)識(shí)回車鍵,原來(lái)是這個(gè)原因)這稱為行緩沖輸入,在鍵入的字符實(shí)際傳送給程序之前必須敲入一個(gè)回車鍵。

2、int putchar(int c);

雖然putchar()帶一個(gè)整數(shù)參數(shù),通??梢杂靡粋€(gè)字符的變?cè){(diào)用它,但是只有其低位字節(jié)被實(shí)際輸出到屏幕上,putchar()函數(shù)放回被寫入的字符,若操作失敗,返回EOF(宏EOF被定義于stdio.h中,通常其值為-1)。

3、int getch(void);

   int getche(void);

兩個(gè)最常用的交互式函數(shù),對(duì)于大多數(shù)編譯器,這些函數(shù)的原型都可在頭文件conio.h中找到,對(duì)于某些編譯器中這些函數(shù)前面有一下劃線。如_getch()和_getche();這就是為什么在VS2008中經(jīng)常提示要在前面加一個(gè)'_'.

4、char* gets(char* str);

讀取從鍵盤上輸入的字符串并把它存放在由其他變?cè)傅牡刂分校鼜逆I盤讀入字符,直到遇到回車鍵為止?;剀囨I不輸入串的一部分,相反,將空結(jié)束符放在串尾來(lái)代替,并且由gets()返回。但是使用gets()是要小心,因?yàn)樗粚?duì)正在接受輸入的字符數(shù)組執(zhí)行邊界檢查。因此,用戶可以鍵入比數(shù)組能夠容納的更多的字符。盡管對(duì)于你使用的范例程序和簡(jiǎn)單使用工具是很好的,在商用代碼中一般不是用它。它的的替代物是fgets();稍后描述。

5、int puts(const char* str);

將它的字符串變?cè)獙懙狡聊簧希蟾恍滦?。它的調(diào)用比printf();開(kāi)銷小,因?yàn)閜uts()只能輸入字符串,不能輸出數(shù)字或進(jìn)行格式轉(zhuǎn)換,因而puts()用的空間少且速度比printf()快。因此函數(shù)puts()經(jīng)常用于代碼優(yōu)化,操作失敗,函數(shù)puts()返回EOF,否則返回非負(fù)值。

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

printf()函數(shù)返回寫入字符的數(shù)目,如果出現(xiàn)一個(gè)錯(cuò)誤,則返回control_string(控制串)有兩種類型項(xiàng)目組成。第一類由將打印在屏幕上的字符串組成,第二類包括自定義其后變?cè)@示方式的格式限定符。格式限定符以一個(gè)百分號(hào)開(kāi)頭,后跟格式化碼,變?cè)斜碇械淖冊(cè)獢?shù)與格式限定符完全相等,格式限定符與變?cè)错樞驈淖蟮接移ヅ洹?/p>

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

可以讀入各種內(nèi)嵌類型并自動(dòng)將其轉(zhuǎn)換為適當(dāng)?shù)母袷?。返回成功的賦予了一個(gè)值的數(shù)據(jù)項(xiàng)。如果出現(xiàn)一個(gè)錯(cuò)誤,scanf()返回EOF。控制串包括三類字符:

a、格式限定符 b、空白字符 c、非空白字符

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

8、FILE* fopen(const char*filename,const*char* mode)

打開(kāi)一個(gè)文件

mode合法值如下:

r   為讀操作打開(kāi)一個(gè)文本文件

w   為寫操作創(chuàng)建一個(gè)文本文件

a  附加到一個(gè)文本文件

rb  為讀操作打開(kāi)一個(gè)二進(jìn)制文件

wb  為寫操作創(chuàng)建一個(gè)二進(jìn)制文件

ab  附加到一個(gè)二進(jìn)制文件

r+  為讀/寫操作打開(kāi)一個(gè)文本文件

w+   為讀/寫操作創(chuàng)建一個(gè)文本文件

a+  為讀/寫操作附加或創(chuàng)建一個(gè)文本文件

r+b  為讀/寫操作打開(kāi)一個(gè)二進(jìn)制文件

w+b  為讀/寫操作創(chuàng)建一個(gè)二進(jìn)制文件

a+b  為讀/寫操作附加一個(gè)二進(jìn)制文件

如果打開(kāi)文件失敗,fopen()返回一個(gè)空指針。

9、int fclose(FILE* fp);

   關(guān)閉一個(gè)由fopen()打開(kāi)的文件,把留在磁盤緩沖區(qū)的數(shù)據(jù)寫入文件并在操作系統(tǒng)級(jí)正式關(guān)閉文件。關(guān)閉流文件失敗會(huì)產(chǎn)生各種麻煩,如:丟失數(shù)據(jù),破壞文件和程序中出現(xiàn)間歇的錯(cuò)誤等。flose()也釋放與流文件控制塊,使它可以重用。有時(shí),由于操作系統(tǒng)一次同時(shí)打開(kāi)的文件數(shù)量有限,因此必須在關(guān)閉一個(gè)文件后再打開(kāi)另一個(gè)文件。  返回0標(biāo)志著文件關(guān)閉成功。如果關(guān)閉失敗,則返回EOF??捎脴?biāo)準(zhǔn)函數(shù)ferror()來(lái)確定和報(bào)告出錯(cuò)消息。通常,fclose()僅在磁盤中驅(qū)動(dòng)器中過(guò)早移走或磁盤上沒(méi)有更多的空間時(shí)報(bào)錯(cuò)。

10、int putc(int ch,F(xiàn)ILE* fp);

把一個(gè)字符寫到文件中,如果操作成功,則函數(shù)返回被輸出的字節(jié);否則,返回EOF

11、int getc(FILE* fp);

從某一文件讀一個(gè)字符,函數(shù)getc()讀到文件尾時(shí)返回EOF標(biāo)志,如果發(fā)生錯(cuò)誤,也返回EOF。

12、fgetc(),同getc()

13、int fgets(const char*str,int length,FILE* fp);從某一文件中讀取一個(gè)字符串,直到讀到換行符或讀完length-1個(gè)字符,如果讀到新行,它是原字符串的一部分(不像gets()那樣另起新串),結(jié)果字符串將以NULL終止。如果操作成功,則函數(shù)返回str,否則返回空指針。

14、int fputs(const char*str,FILE*fp),把str指向的字符串寫到指定的流中,如果失敗,則返回EOF

15、fseek(),在文件中查找一個(gè)特定的字節(jié)

16、ftell(),返回當(dāng)前文件的位置

17、fprintf(),輸出到磁盤文件上

18、fscanf(),從磁盤中讀數(shù)據(jù)

19、int feof(FILE* fp);

若到文件尾,返回真值.既可用于二進(jìn)制文件,也可應(yīng)用于文本文件

eg:

 while(!feof(fp)) ch = getc(fp);

20、int ferror(FILE* fp);

函數(shù)確定是否在文件操作期間出錯(cuò)。fp是有效的文件指針。在文件操作期間如果有錯(cuò),則函數(shù)返回true,否則返回false。由于每個(gè)文件操作均設(shè)置錯(cuò)誤條件,因而應(yīng)在每個(gè)文件中操作后立即調(diào)用ferror(),否則會(huì)丟失錯(cuò)誤信息。

21、void rewind(FILE* fp),把文件位置指針重新置于文件的起始位置,fp是有效的文件指針,

22、int remove(const char*filename),清除一個(gè)文件,操作成功,返回0,操作失敗返回非零值。

23、int fflush(FILE* fp);

清空一個(gè)輸出流的內(nèi)容,將任何緩沖區(qū)的內(nèi)容寫到與fp相關(guān)的文件中,如果在fp為空時(shí)調(diào)用fflush(),則所有為輸出打開(kāi)的文件被清空。操作成功返回0,否則返回EOF。

24,size_t fread(void* buffer,size_t num_byte,size_t count,FILE* fp);

buffer 是一個(gè)指針,指向一個(gè)接收文件中數(shù)據(jù)的存儲(chǔ)區(qū),count的值指出要寫多少項(xiàng)。返回讀入的項(xiàng)的數(shù)目,如遇到文件的結(jié)尾或操作失敗。這個(gè)值可能少于count。

25、size_t fwrite(const void * buffer,size_t num_byte,size_t count ,FILE* fp);

buffer 是一個(gè)指針,指向要寫入文件中的信息快。count的值指出要寫多少項(xiàng)。返回寫入項(xiàng)的數(shù)目,這個(gè)值永遠(yuǎn)等于count,除非操作失敗。

注意:size_t類型被定義為某種無(wú)符號(hào)整數(shù),fp是一個(gè)指向已經(jīng)打開(kāi)流的文件指針。fwrite()和fread()最大的用途之一是可以寫用戶自定義的數(shù)據(jù)類型,特別是結(jié)構(gòu)體類型

26、int fseek(FILE* fp,long int numbytes,int origin);

fp是由fopen()返回的指針,numbytes是從文件的origin位置到當(dāng)前位置的字節(jié),是下面的宏之一:

origin      宏名

文件開(kāi)始處    SEEK_SET

當(dāng)前位置    SEEK_CUR

文件末尾    SEEK_END

可以用fseek()來(lái)尋找任何數(shù)據(jù)類型的倍數(shù),方法是用想要的項(xiàng)數(shù)乘以數(shù)據(jù)的長(zhǎng)度。eg:fseek(fp,9*sizeof(struct myStruct),SEEK_SET);

27、long int ftell(FILE* fp);

決定一個(gè)文件的當(dāng)前位置,返回與fp關(guān)聯(lián)的文件的當(dāng)前位置的地址。如果失敗,返回-1.

28、int fprintf(FILE* fp,const char* control_string...);

int fscanf(FILE* fp,const char* control_string...);

注意:盡管fprintf()和scanf()是從磁盤文件中讀寫數(shù)據(jù)最容易的方法,但卻并不是最有效的方法。由于格式化的ASCⅡ數(shù)據(jù)寫入文件的格式與在屏幕上顯示的相同(而不是二進(jìn)制方式),因而調(diào)用時(shí)要引起額外的開(kāi)銷。如果要考慮速度與文件長(zhǎng)度,最好使用fread()和fwrite()

C++內(nèi)置流

流    含義   默認(rèn)設(shè)備

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

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

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

clog  cerr的緩沖版本 屏幕

cin、cout、cerr和C的stdin、stdout、stderr相對(duì)應(yīng)。

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

29、fmtflags setf(fmtflags flags);

該函數(shù)返回格式標(biāo)記先前的并開(kāi)啟又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();

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

32、fmtflags flags(fmtflags f);

設(shè)置某個(gè)流的所有標(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)型時(shí),可以使用precision()函數(shù)來(lái)確定數(shù)字的精確位數(shù)。

35、char fill(char ch);

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

C++操作算子

操作算子  用途    輸入/輸出

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

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

endl   輸出一個(gè)換行符并刷新流 輸出

ends   輸出一個(gè)null   輸出

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

flush   刷新一個(gè)流    輸出

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

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

left   開(kāi)啟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    開(kāi)啟oct標(biāo)記    輸入/輸出

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ws     跳過(guò)開(kāi)始的空格  輸入

注意:在訪問(wèn)帶參數(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)建一個(gè)流

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  使得在打開(kāi)文件時(shí)能夠定位到文件末尾

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

ios::in  指定為輸入

ios::out 制定我輸出

ios::trunc 銷毀具有相同名字的先前文件的內(nèi)容,并且將文件長(zhǎng)度截?cái)酁?,當(dāng)使用ofstream創(chuàng)建一個(gè)輸出流時(shí)任何先前存在的具有該文件名的文件將被自動(dò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++庫(kù)定義的類型--是某種類型,它可以存儲(chǔ)能夠被任何一種I/O操作轉(zhuǎn)換的最大字符數(shù)。

39、streamsize gcount();

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

40、get()的重載版本:

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

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

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

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

int get();

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

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

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

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

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

42、bool eof();

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

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

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

44、int_type peek();

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

45、istream& putback(char c);

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

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定義的一個(gè)整數(shù)類型,可以包含offset具有的最大有效值,seekdir是一個(gè)ios定義的枚舉類型,用來(lái)決定查找方式。seekg()函數(shù)可以把相關(guān)文件當(dāng)前的獲取指針從指定origin出偏移offset個(gè)字符,origin必須是一下三個(gè)值中的一個(gè)

ios::beg   文件頭

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

ios::end  文件尾

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

48、pos_type tellg();

 pos_type tellp();

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

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

ios::goodbit   無(wú)錯(cuò)誤位設(shè)置

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

ios::failbit   當(dāng)出現(xiàn)非致命錯(cuò)誤時(shí)為1,否則為0

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

獲得I/O狀體的方法:

 

a、iostate rdstate();

b、bool bad();

   bool eof();

   bool fail();

   bool good();

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

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

 

參考資料:《C++參考大全(第四版)》

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
區(qū)分C語(yǔ)言中g(shù)etch、getche、fgetc、getc、getchar、fgets、g...
【C語(yǔ)言】文件常用讀寫操作(含讀取學(xué)生信息示例)
第十三章 文 件
C語(yǔ)言常用的庫(kù)函數(shù)
C++中的文件操作
基于C的文件操作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服