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