C++支持兩種I/O,第一種是從C語言繼承來的,一種是由C++定義的面向?qū)ο驣/O系統(tǒng)。
從C繼承來的I/O操作
int getchar(void)
返回一個整數(shù)值,也可指定該值為char變量。如果有錯,getchar()返回EOF。但是他有一個潛在的問題,正常情況下,getchar()緩存輸入,直到鍵入了回車鍵。這稱為行緩沖輸入,在鍵入的字符實際傳送給程序之前必須敲入一個回車鍵。
int putchar(int c)
雖然putchar()帶一個整數(shù)參數(shù),通??梢杂靡粋€字符的變元調(diào)用它,但是只有其低位字節(jié)被實際輸出到屏幕上,putchar()函數(shù)放回被寫入的字符,若操作失敗,返回EOF(宏EOF被定義于stdio.h中,通常其值為-1)。
char* gets(char* str)
讀取從鍵盤上輸入的字符串并把它存放在由其他變元所指的地址中,它從鍵盤讀入字符,直到遇到回車鍵為止?;剀囨I不輸入串的一部分,相反,將空結束符放在串尾來代替,并且由gets()返回。但是使用gets()是要小心,因為它不對正在接受輸入的字符數(shù)組執(zhí)行邊界檢查。因此,用戶可以鍵入比數(shù)組能夠容納的更多的字符。
int puts(const char* str)
將它的字符串變元寫到屏幕上,后跟一新行。它的調(diào)用比printf();開銷小,因為puts()只能輸入字符串,不能輸出數(shù)字或進行格式轉換,因而puts()用的空間少且速度比printf()快。因此函數(shù)puts()經(jīng)常用于代碼優(yōu)化,操作失敗,函數(shù)puts()返回EOF,否則返回非負值。
int printf(const char* control_string,...)
printf()函數(shù)返回寫入字符的數(shù)目,如果出現(xiàn)一個錯誤,則返回control_string(控制串)有兩種類型項目組成。第一類由將打印在屏幕上的字符串組成,第二類包括自定義其后變元顯示方式的格式限定符。格式限定符以一個百分號開頭,后跟格式化碼,變元列表中的變元數(shù)與格式限定符完全相等,格式限定符與變元按順序從左到右匹配。
int scanf(const char* control_string...)
可以讀入各種內(nèi)嵌類型并自動將其轉換為適當?shù)母袷?。返回成功的賦予了一個值的數(shù)據(jù)項。如果出現(xiàn)一個錯誤,scanf()返回EOF。
FILE* fopen(const char*filename,const*char* mode)
打開一個文件,如果打開文件失敗,fopen()返回一個空指針。mode合法值如下:
r 為讀操作打開一個文本文件
w 為寫操作創(chuàng)建一個文本文件
a 附加到一個文本文件
rb 為讀操作打開一個二進制文件
wb 為寫操作創(chuàng)建一個二進制文件
ab 附加到一個二進制文件
r+ 為讀/寫操作打開一個文本文件
w+ 為讀/寫操作創(chuàng)建一個文本文件
a+ 為讀/寫操作附加或創(chuàng)建一個文本文件
r+b 為讀/寫操作打開一個二進制文件
w+b 為讀/寫操作創(chuàng)建一個二進制文件
a+b 為讀/寫操作附加一個二進制文件
int fclose(FILE *fp)
關閉一個由fopen()打開的文件,把留在磁盤緩沖區(qū)的數(shù)據(jù)寫入文件并在操作系統(tǒng)級正式關閉文件。關閉流文件失敗會產(chǎn)生各種麻煩,如:丟失數(shù)據(jù),破壞文件和程序中出現(xiàn)間歇的錯誤等。flose()也釋放與流文件控制塊,使它可以重用。有時,由于操作系統(tǒng)一次同時打開的文件數(shù)量有限,因此必須在關閉一個文件后再打開另一個文件。 返回0標志著文件關閉成功。如果關閉失敗,則返回EOF。可用標準函數(shù)ferror()來確定和報告出錯消息。通常,fclose()僅在磁盤中驅(qū)動器中過早移走或磁盤上沒有更多的空間時報錯。
fprintf() fscanf()
輸出到磁盤文件;從磁盤讀取數(shù)據(jù)。
C++內(nèi)置流
流 含義 默認設備
cin 標準輸入 鍵盤
cout 標準輸出 屏幕
cerr 標準錯誤輸出 屏幕
clog cerr的緩沖版本 屏幕
stream& getline(char* buf,streamsize num)
把字符讀入由buf指向的數(shù)組,直到讀取到第num-1個字符,發(fā)現(xiàn)了一個換行符或者遇到了文件尾。指針buf所指向的數(shù)組以null字符結束。如果在出輸入流中遇到換行符時,則提取該字符,但是不會將其放入buf。
istream& getline (char* buf, streamsize num, char delim )
把字符讀入由buf指向的數(shù)組,直到讀取到第num-1個字符,發(fā)現(xiàn)了由delim指定的字符或者是遇到了文件尾。指針buf所指向的數(shù)組以null字符結束。如果在輸入流中遇到分隔符字符,則提取該字符,但是不將其放入buf.
上面兩個為全局函數(shù),C++在<string>頭文件中也定義了一個getline函數(shù)。
istream& getline ( istream& is, string& str, char delim )
istream& getline ( istream& is, string& str )