c++ 基本的輸入輸出
c++ 標(biāo)準(zhǔn)庫提供了一組豐富的輸入/輸出功能,我們將在后續(xù)的章節(jié)進(jìn)行介紹。本章將討論 c++ 編程中最基本和最常見的 i/o 操作。
c++ 的 i/o 發(fā)生在流中,流是字節(jié)序列。如果字節(jié)流是從設(shè)備(如鍵盤、磁盤驅(qū)動(dòng)器、網(wǎng)絡(luò)連接等)流向內(nèi)存,這叫做輸入操作。如果字節(jié)流是從內(nèi)存流向設(shè)備(如顯示屏、打印機(jī)、磁盤驅(qū)動(dòng)器、網(wǎng)絡(luò)連接等),這叫做輸出操作。
1. i/o 庫頭文件
下列的頭文件在 c++ 編程中很重要。
頭文件 | 函數(shù)和描述 |
---|---|
該文件定義了 cin、cout、cerr 和 clog 對(duì)象,分別對(duì)應(yīng)于標(biāo)準(zhǔn)輸入流、標(biāo)準(zhǔn)輸出流、非緩沖標(biāo)準(zhǔn)錯(cuò)誤流和緩沖標(biāo)準(zhǔn)錯(cuò)誤流。 | |
該文件通過所謂的參數(shù)化的流操縱器(比如 setw 和 setprecision),來聲明對(duì)執(zhí)行標(biāo)準(zhǔn)化 i/o 有用的服務(wù)。 | |
該文件為用戶控制的文件處理聲明服務(wù)。我們將在文件和流的相關(guān)章節(jié)討論它的細(xì)節(jié)。 |
2. 標(biāo)準(zhǔn)輸出流(cout)
預(yù)定義的對(duì)象 cout 是 ostream 類的一個(gè)實(shí)例。cout 對(duì)象"連接"到標(biāo)準(zhǔn)輸出設(shè)備,通常是顯示屏。cout 是與流插入運(yùn)算符 << 結(jié)合使用的,如下所示:
#include using namespace std; int main( ) { char str[] = "hello c++"; cout << "value of str is : " << str << endl; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
value of str is : hello c++
c++ 編譯器根據(jù)要輸出變量的數(shù)據(jù)類型,選擇合適的流插入運(yùn)算符來顯示值。<< 運(yùn)算符被重載來輸出內(nèi)置類型(整型、浮點(diǎn)型、double 型、字符串和指針)的數(shù)據(jù)項(xiàng)。
流插入運(yùn)算符 << 在一個(gè)語句中可以多次使用,如上面實(shí)例中所示,endl 用于在行末添加一個(gè)換行符。
3. 標(biāo)準(zhǔn)輸入流(cin)
預(yù)定義的對(duì)象 cin 是 istream 類的一個(gè)實(shí)例。cin 對(duì)象附屬到標(biāo)準(zhǔn)輸入設(shè)備,通常是鍵盤。cin 是與流提取運(yùn)算符 >> 結(jié)合使用的,如下所示:
#include using namespace std; int main( ) { char name[50]; cout << "請(qǐng)輸入您的名稱: "; cin >> name; cout << "您的名稱是: " << name << endl; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)提示用戶輸入名稱。當(dāng)用戶輸入一個(gè)值,并按回車鍵,就會(huì)看到下列結(jié)果:
請(qǐng)輸入您的名稱: cplusplus 您的名稱是: cplusplus
c++ 編譯器根據(jù)要輸入值的數(shù)據(jù)類型,選擇合適的流提取運(yùn)算符來提取值,并把它存儲(chǔ)在給定的變量中。
流提取運(yùn)算符 >> 在一個(gè)語句中可以多次使用,如果要求輸入多個(gè)數(shù)據(jù),可以使用如下語句:
cin >> name >> age;
這相當(dāng)于下面兩個(gè)語句:
cin >> name; cin >> age;
4. 標(biāo)準(zhǔn)錯(cuò)誤流(cerr)
預(yù)定義的對(duì)象 cerr 是 ostream 類的一個(gè)實(shí)例。cerr 對(duì)象附屬到標(biāo)準(zhǔn)錯(cuò)誤設(shè)備,通常也是顯示屏,但是 cerr 對(duì)象是非緩沖的,且每個(gè)流插入到 cerr 都會(huì)立即輸出。
cerr 也是與流插入運(yùn)算符 << 結(jié)合使用的,如下所示:
#include using namespace std; int main( ) { char str[] = "unable to read...."; cerr << "error message : " << str << endl; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
error message : unable to read....
5. 標(biāo)準(zhǔn)日志流(clog)
預(yù)定義的對(duì)象 clog 是 ostream 類的一個(gè)實(shí)例。clog 對(duì)象附屬到標(biāo)準(zhǔn)錯(cuò)誤設(shè)備,通常也是顯示屏,但是 clog 對(duì)象是緩沖的。這意味著每個(gè)流插入到 clog 都會(huì)先存儲(chǔ)在緩沖區(qū)中,直到緩沖填滿或者緩沖區(qū)刷新時(shí)才會(huì)輸出。
clog 也是與流插入運(yùn)算符 << 結(jié)合使用的,如下所示:
#include using namespace std; int main( ) { char str[] = "unable to read...."; clog << "error message : " << str << endl; }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
error message : unable to read....
通過這些小實(shí)例,我們無法區(qū)分 cout、cerr 和 clog 的差異,但在編寫和執(zhí)行大型程序時(shí),它們之間的差異就變得非常明顯。所以良好的編程實(shí)踐告訴我們,使用 cerr 流來顯示錯(cuò)誤消息,而其他的日志消息則使用 clog 流來輸出。