C/C++語(yǔ)言本身并不帶輸入和輸出(即I/O)功能,而是提供了輸入輸出庫(kù),也稱(chēng)為I/O庫(kù)。通過(guò)I/O庫(kù),我們可以完成輸入和輸出的操作。大多數(shù)C程序使用一種稱(chēng)為stdio(標(biāo)準(zhǔn)I/O)的I/O庫(kù),該庫(kù)也能夠在C++中使用。但是,在C++程序中,一種稱(chēng)為iostream(I/O 流庫(kù))的I/O庫(kù)用得更多。
在C++中,I/O使用了流的概念-字符(或字節(jié))流。每一個(gè)I/O 設(shè)備傳送和接收一系列的字節(jié),稱(chēng)之為流。輸入操作可以看成是字節(jié)從一個(gè)設(shè)備流入內(nèi)存,而輸出操作可以看成是字節(jié)從內(nèi)存流出到一個(gè)設(shè)備。流是輸入輸出設(shè)備的另一個(gè)名字-一個(gè)文件、屏幕、鍵盤(pán)等。要使用C++標(biāo)準(zhǔn)的I/O流庫(kù)的功能,必須包括兩個(gè)頭文件:
#include
#include
iostream.h文件提供基本的輸入輸出功能,iomanip.h 文件提供格式化的功能。通過(guò)包含iostream流庫(kù),內(nèi)存中就創(chuàng)建了一些用于處理輸入和輸出操作的對(duì)象。標(biāo)準(zhǔn)的輸出流(通常是屏幕)稱(chēng)為cout,標(biāo)準(zhǔn)的輸入流(通常是鍵盤(pán))稱(chēng)為cin。
輸出變量d的值到標(biāo)準(zhǔn)輸出設(shè)備的語(yǔ)法形式如下:
cout << d;
注意:(<<)是雙小于號(hào),不是左移操作符,它是一種輸出操作符,指出程序哪個(gè)流發(fā)送數(shù)據(jù)。
本語(yǔ)句表示傳送d的值到標(biāo)準(zhǔn)的輸出設(shè)備(由cout表示)。理解這個(gè)語(yǔ)句的一種方法是調(diào)用了函數(shù)operator<<,d是函數(shù)參數(shù)(關(guān)于函數(shù)調(diào)用,在第五章學(xué)習(xí))。明確地說(shuō),為了輸出d的值到cout,可以使用語(yǔ)句:
cout.operator<<(d);
由于"cout.operator<<(d);"寫(xiě)起來(lái)繁瑣,我們更喜歡把它寫(xiě)成"cout << d;"。
對(duì)于C語(yǔ)言的程序中,使用的是stdio(標(biāo)準(zhǔn)I/O)庫(kù),在這個(gè)庫(kù)中不僅定義了面向控制臺(tái)(顯示器和鍵盤(pán))的輸入輸出,還分別定義了文件輸入輸出函數(shù)和面向內(nèi)存的輸入輸出函數(shù)。在C++程序中,我們最常使用的是iostream(I/O 流庫(kù)),它是基于面向?qū)ο蟮?,可以?shí)現(xiàn)stdio庫(kù)的所有功能,通過(guò)它統(tǒng)一了標(biāo)準(zhǔn)I/O、文件和存儲(chǔ)塊的函數(shù)接口,使得對(duì)所有設(shè)備的操作看上去都一樣,隱藏了內(nèi)部實(shí)現(xiàn)。與標(biāo)準(zhǔn)C輸入輸出庫(kù)的各種各樣的函數(shù)相比,輸入輸出流更容易、更安全、更有效。為了保證兼容性,I/O流類(lèi)和C標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)是可以共同使用的。
使用stdio庫(kù),需要在程序中包含stdio.h頭文件,若使用iostream庫(kù),需要包含iostream.h頭文件,如果要帶參數(shù)的格式化輸入輸出,還需要包含iomanip.h頭文件。
使用stdio庫(kù)的標(biāo)準(zhǔn)輸入輸出,要使用scanf和printf函數(shù),scanf函數(shù)是從標(biāo)準(zhǔn)輸入(鍵盤(pán))設(shè)備讀入,printf是向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出。
iostream庫(kù)在iostream.h中預(yù)定義了四個(gè)全局的流對(duì)象:cout、cerr、clog和cin,用于標(biāo)準(zhǔn)輸出和輸入,cout和cin在程序設(shè)計(jì)中會(huì)經(jīng)常用到。cout流對(duì)象控制向控制臺(tái)(顯示器)的標(biāo)準(zhǔn)輸出,cin控制從控制臺(tái)(鍵盤(pán))輸入。
2.7.1 標(biāo)準(zhǔn)輸出
輸出內(nèi)置的數(shù)據(jù)類(lèi)型到標(biāo)準(zhǔn)的輸出設(shè)備,用<<運(yùn)算符和cout輸出流。例如:
cout << d; // 輸出d
cout << d << endl; // 輸出d并換行
cout << "This is the value of d : " << d << endl; // 輸出字符串、d并換行
一個(gè)語(yǔ)句中多次使用<<等價(jià)于<<單獨(dú)使用多次,即最后一個(gè)語(yǔ)句等價(jià)于:
cout << "This is the value of d : " ;
cout << d;
cout << endl;
符號(hào)endl的功能是換行,并清除輸出緩沖區(qū)。變量的值以缺省的格式打印,改變打印格式方法在后面介紹。
C語(yǔ)言的轉(zhuǎn)義字符在C++中仍然有效,所以在iostream中,我們可以使用轉(zhuǎn)義字符,比如要達(dá)到回車(chē)的效果,我們可以使用:
cout< 也可以使用:
cout<<'\n';
如果實(shí)現(xiàn)簡(jiǎn)單的格式化輸出,我們可以使用制表符:
cout<<"name\tage\tsex"< 2.7.2 標(biāo)準(zhǔn)輸入
標(biāo)準(zhǔn)輸入的用法與標(biāo)準(zhǔn)輸出類(lèi)似,使用>>運(yùn)算符和cin輸入流。語(yǔ)句:
cin >> d;
是從標(biāo)準(zhǔn)輸入讀(或抽?。┮粋€(gè)值到變量d,并與語(yǔ)句中的數(shù)據(jù)類(lèi)型匹配。例如:如果d是整型數(shù),上面的命令讀數(shù)字,直至沒(méi)有遇到數(shù)字為止;如果d是浮點(diǎn)數(shù),該命令讀數(shù)字、小數(shù)點(diǎn)、指數(shù),直至沒(méi)有遇到合適的字符為止。
假如把輸入和輸出語(yǔ)句結(jié)合在一起使用,可能會(huì)發(fā)生問(wèn)題。我們編寫(xiě)程序時(shí),常常先用一個(gè)輸出語(yǔ)句打印提示,然后要求用戶輸入數(shù)據(jù)。對(duì)于一些C++編譯器,在輸入語(yǔ)句抽取數(shù)據(jù)前,應(yīng)先輸出一個(gè)換行符。例如2-9:
否則,可能達(dá)不到目的。
經(jīng)驗(yàn):如何記<<和>>:cout是c出,出了就?。?<)了; cin是c進(jìn),進(jìn)則收入,就大(>>)
注意:cin流不使用指針引用變量,不應(yīng)給cin傳遞一個(gè)指向變量的指針,如果這樣做cin將返回錯(cuò)誤。例如,下面的程序cin_err.cpp ,當(dāng)編譯它時(shí)將返回六個(gè)錯(cuò)誤: 例2-8:
#include
void main(void)
{
int age;
float salary;
char name[128];
cout << "Enter your first name age salary: ";
cin >> &name >> &age >> &salary;
cout << name << " " << age << " " << salary;
}
在C++中,I/O使用了流的概念-字符(或字節(jié))流。每一個(gè)I/O 設(shè)備傳送和接收一系列的字節(jié),稱(chēng)之為流。輸入操作可以看成是字節(jié)從一個(gè)設(shè)備流入內(nèi)存,而輸出操作可以看成是字節(jié)從內(nèi)存流出到一個(gè)設(shè)備。流是輸入輸出設(shè)備的另一個(gè)名字-一個(gè)文件、屏幕、鍵盤(pán)等。要使用C++標(biāo)準(zhǔn)的I/O流庫(kù)的功能,必須包括兩個(gè)頭文件:
#include
#include
iostream.h文件提供基本的輸入輸出功能,iomanip.h 文件提供格式化的功能。通過(guò)包含iostream流庫(kù),內(nèi)存中就創(chuàng)建了一些用于處理輸入和輸出操作的對(duì)象。標(biāo)準(zhǔn)的輸出流(通常是屏幕)稱(chēng)為cout,標(biāo)準(zhǔn)的輸入流(通常是鍵盤(pán))稱(chēng)為cin。
輸出變量d的值到標(biāo)準(zhǔn)輸出設(shè)備的語(yǔ)法形式如下:
cout << d;
注意:(<<)是雙小于號(hào),不是左移操作符,它是一種輸出操作符,指出程序哪個(gè)流發(fā)送數(shù)據(jù)。
本語(yǔ)句表示傳送d的值到標(biāo)準(zhǔn)的輸出設(shè)備(由cout表示)。理解這個(gè)語(yǔ)句的一種方法是調(diào)用了函數(shù)operator<<,d是函數(shù)參數(shù)(關(guān)于函數(shù)調(diào)用,在第五章學(xué)習(xí))。明確地說(shuō),為了輸出d的值到cout,可以使用語(yǔ)句:
cout.operator<<(d);
由于"cout.operator<<(d);"寫(xiě)起來(lái)繁瑣,我們更喜歡把它寫(xiě)成"cout << d;"。
對(duì)于C語(yǔ)言的程序中,使用的是stdio(標(biāo)準(zhǔn)I/O)庫(kù),在這個(gè)庫(kù)中不僅定義了面向控制臺(tái)(顯示器和鍵盤(pán))的輸入輸出,還分別定義了文件輸入輸出函數(shù)和面向內(nèi)存的輸入輸出函數(shù)。在C++程序中,我們最常使用的是iostream(I/O 流庫(kù)),它是基于面向?qū)ο蟮?,可以?shí)現(xiàn)stdio庫(kù)的所有功能,通過(guò)它統(tǒng)一了標(biāo)準(zhǔn)I/O、文件和存儲(chǔ)塊的函數(shù)接口,使得對(duì)所有設(shè)備的操作看上去都一樣,隱藏了內(nèi)部實(shí)現(xiàn)。與標(biāo)準(zhǔn)C輸入輸出庫(kù)的各種各樣的函數(shù)相比,輸入輸出流更容易、更安全、更有效。為了保證兼容性,I/O流類(lèi)和C標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)是可以共同使用的。
使用stdio庫(kù),需要在程序中包含stdio.h頭文件,若使用iostream庫(kù),需要包含iostream.h頭文件,如果要帶參數(shù)的格式化輸入輸出,還需要包含iomanip.h頭文件。
使用stdio庫(kù)的標(biāo)準(zhǔn)輸入輸出,要使用scanf和printf函數(shù),scanf函數(shù)是從標(biāo)準(zhǔn)輸入(鍵盤(pán))設(shè)備讀入,printf是向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出。
iostream庫(kù)在iostream.h中預(yù)定義了四個(gè)全局的流對(duì)象:cout、cerr、clog和cin,用于標(biāo)準(zhǔn)輸出和輸入,cout和cin在程序設(shè)計(jì)中會(huì)經(jīng)常用到。cout流對(duì)象控制向控制臺(tái)(顯示器)的標(biāo)準(zhǔn)輸出,cin控制從控制臺(tái)(鍵盤(pán))輸入。
2.7.1 標(biāo)準(zhǔn)輸出
輸出內(nèi)置的數(shù)據(jù)類(lèi)型到標(biāo)準(zhǔn)的輸出設(shè)備,用<<運(yùn)算符和cout輸出流。例如:
cout << d; // 輸出d
cout << d << endl; // 輸出d并換行
cout << "This is the value of d : " << d << endl; // 輸出字符串、d并換行
一個(gè)語(yǔ)句中多次使用<<等價(jià)于<<單獨(dú)使用多次,即最后一個(gè)語(yǔ)句等價(jià)于:
cout << "This is the value of d : " ;
cout << d;
cout << endl;
符號(hào)endl的功能是換行,并清除輸出緩沖區(qū)。變量的值以缺省的格式打印,改變打印格式方法在后面介紹。
C語(yǔ)言的轉(zhuǎn)義字符在C++中仍然有效,所以在iostream中,我們可以使用轉(zhuǎn)義字符,比如要達(dá)到回車(chē)的效果,我們可以使用:
cout<
cout<<'\n';
如果實(shí)現(xiàn)簡(jiǎn)單的格式化輸出,我們可以使用制表符:
cout<<"name\tage\tsex"<
標(biāo)準(zhǔn)輸入的用法與標(biāo)準(zhǔn)輸出類(lèi)似,使用>>運(yùn)算符和cin輸入流。語(yǔ)句:
cin >> d;
是從標(biāo)準(zhǔn)輸入讀(或抽?。┮粋€(gè)值到變量d,并與語(yǔ)句中的數(shù)據(jù)類(lèi)型匹配。例如:如果d是整型數(shù),上面的命令讀數(shù)字,直至沒(méi)有遇到數(shù)字為止;如果d是浮點(diǎn)數(shù),該命令讀數(shù)字、小數(shù)點(diǎn)、指數(shù),直至沒(méi)有遇到合適的字符為止。
假如把輸入和輸出語(yǔ)句結(jié)合在一起使用,可能會(huì)發(fā)生問(wèn)題。我們編寫(xiě)程序時(shí),常常先用一個(gè)輸出語(yǔ)句打印提示,然后要求用戶輸入數(shù)據(jù)。對(duì)于一些C++編譯器,在輸入語(yǔ)句抽取數(shù)據(jù)前,應(yīng)先輸出一個(gè)換行符。例如2-9:
否則,可能達(dá)不到目的。
經(jīng)驗(yàn):如何記<<和>>:cout是c出,出了就?。?<)了; cin是c進(jìn),進(jìn)則收入,就大(>>)
注意:cin流不使用指針引用變量,不應(yīng)給cin傳遞一個(gè)指向變量的指針,如果這樣做cin將返回錯(cuò)誤。例如,下面的程序cin_err.cpp ,當(dāng)編譯它時(shí)將返回六個(gè)錯(cuò)誤: 例2-8:
#include
void main(void)
{
int age;
float salary;
char name[128];
cout << "Enter your first name age salary: ";
cin >> &name >> &age >> &salary;
cout << name << " " << age << " " << salary;
}

