您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)C/C++中I/O進(jìn)階怎么用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
C++ 的輸入 (input stream) 和輸出 (output stream)是由若干字節(jié)組成的字節(jié)序列, 使得數(shù)據(jù)按順序從一個(gè)對象傳送到另一對象. 流 (stream) 表示量信息從源到目的端的流動(dòng).
C++ 的輸入輸出包括:
標(biāo)準(zhǔn) I/O: 對系統(tǒng)指定的標(biāo)準(zhǔn)設(shè)備的輸入
文件 I/O: 對磁盤文件的輸入和輸出
串 I/O: 對內(nèi)存中指定的空間進(jìn)行的輸入和輸出
I/O stream 類庫:
頭文件是程序與類庫的接口, iostream 類庫的接口分別由不同的文件來實(shí)現(xiàn).
常用的頭文件:
iostream: 包含對 I/O 進(jìn)行操作的基本信息
fstream: 用于用戶管理的文件的 I/O 操作
strstream: 用于字符串流的 I/O 操作
stdiostream: 用于混合使用 C 和 C++ 的 I/O 機(jī)制
iomanip: 使用格式化 I/O 時(shí)的操作
在之前的文章中我們使用<<
和>>
來實(shí)現(xiàn)控制臺的輸出和輸入.
<<
和>>
被重載來用于標(biāo)準(zhǔn)類型數(shù)據(jù)的輸出和輸入:
<<
和>>
本來是 C++ 中的左位移運(yùn)算符和右位移運(yùn)算符
在 iostream 頭文件中<<
和>>
被重載了
在使用<<
和>>
的時(shí)候, 我們必須#include <iostream>
在 input stream 和 output stream 類中對位移運(yùn)算符<<
和>>
進(jìn)行重載的成員函數(shù), 包括:
ostream operator << (int );
ostream operator << (float );
ostream operator << (char );
ostream operator << (char *);
注: 想將<<
和>>
用于自己聲明的類型數(shù)據(jù)必須對<<
和>>
進(jìn)行重載.
I/O stream 頭文件還定義了 4 種流對象:
cin: 從標(biāo)準(zhǔn)輸入設(shè)備輸入到內(nèi)存的數(shù)據(jù)流對象, 稱- 為 cin 流或標(biāo)準(zhǔn)輸入流
cout: 從內(nèi)存輸出到控制臺的數(shù)據(jù)流對象, 稱為 cout 流或標(biāo)準(zhǔn)輸出流
cerr 和 clog: 向控制臺輸出錯(cuò)誤信息
例如:
當(dāng)我們從鍵盤輸入 “World”, cin 會把字符串存入內(nèi)存, 當(dāng)我們調(diào)用 cout, 內(nèi)存中的 “World” 就被輸出到控制臺上.
標(biāo)準(zhǔn)輸出流, 是流向標(biāo)準(zhǔn)輸出設(shè)備的數(shù)據(jù). ostream 類定義了 3 個(gè)輸出流對象: cout, cerr, clog.
cin 是 istream 類的對象, 從標(biāo)準(zhǔn)輸入設(shè)備獲取數(shù)據(jù). 程序中的變量通過流提取符>>
從 cin 流中提取數(shù)據(jù):
流提取符>>
從流中提取數(shù)據(jù)時(shí), 通常跳過流中的空格, tab 鍵, 換行符等空白字符
只有在輸入完數(shù)據(jù)再按回車鍵后, 該行數(shù)據(jù)才被送入鍵盤緩沖區(qū), 形成輸入流. 提取運(yùn)算符>>
才能從中提取數(shù)據(jù)
程序?qū)逆I盤緩沖區(qū)中連續(xù)的獲得數(shù)據(jù)
當(dāng)遇到無效字符或文件結(jié)束符^Z
時(shí), cin 無法正常提取數(shù)據(jù), 處于出錯(cuò)狀態(tài), 返回 0 值 (false)
輸入個(gè)數(shù)不確定的成績:
#include <iostream> #include <valarray> using namespace std; int main() { // 定義變量 double grade; cout << "enter your grade:\n"; while (cin >> grade){ if(grade >= 85){ cout << grade << " Good!" << endl; } if(grade < 60){ cout << grade << " fail" << endl; } cout << "enter your grade:\n"; } cout << "The end." << endl; return 0; }
輸出結(jié)果:
enter your grade:
90
90 Good!
enter your grade:
12
12 fail
enter your grade:
^Z
The end.
不帶參數(shù)的 get 函數(shù):
cin.get()
從輸入流中提取一個(gè)字符, 返回讀入的字符
遇到輸入流中的文件結(jié)束符, 則返回 EOF (End Of File)
有一個(gè)參數(shù)的 get 函數(shù):
cin.get(c)
從輸入流中讀取一個(gè)字符, 賦值給字符變量 c
讀取成功返回真, 失敗或遇到文件結(jié)束符返回 0 (false)
有 3 個(gè)參數(shù)的 get 函數(shù):
cin.get(字符數(shù)組或指針, n, 終止字符)
從輸入流中讀取 n-1 個(gè)字符, 賦值給指定的字符數(shù)組
若在讀取 n-1 個(gè)字符之前遇到指定的終止字符, 則提前結(jié)束讀取
讀取成功函數(shù)返回真, 失敗返回 0 (false)
getline 函數(shù)的作用是從輸入流中讀取一行字符. 例如:
istream &getline(char *buffer, streamsize num ); istream &getline(char *buffer, streamsize num, char delim );
getline 函數(shù)用于輸入流, 讀取字符到 buffer 中, 直到:
num-1 個(gè)字符已經(jīng)讀入
碰到一個(gè)換行標(biāo)志
碰到一個(gè) EOF
讀到字符 delim
注: getline 函數(shù)遇到空白字符不結(jié)束.
eof (End Of File) 表示文件結(jié)束. 從輸入流讀取數(shù)據(jù)如果達(dá)到文件末尾或遇到文件結(jié)束符時(shí), eof 函數(shù)的值為非零值 (true), 否則為 0 (false)
cout 是 console input 的縮寫, 意為在控制臺的輸出:
cout 不是 C++ 預(yù)定義的關(guān)鍵字, 它是 ostream 流類的對象, 在 iostream 中定義
“cout <<” 輸出基本類型的數(shù)據(jù)時(shí), 可以不必考慮數(shù)據(jù)是什么類型,系統(tǒng)會判斷數(shù)據(jù)的類型, 并根據(jù)其類型選擇調(diào)用與之匹配的運(yùn)算符重載函數(shù)
cout 流在內(nèi)存中對應(yīng)開辟了一個(gè)緩沖區(qū), 用來存放流中的數(shù)據(jù), 當(dāng)向 cout 流插入一個(gè) endl 時(shí), 立即輸出流中所有數(shù)據(jù), 然后插入一個(gè)換行符, 并刷新流 (清空緩沖區(qū))
cout.flush(); 輸出流中所有數(shù)據(jù), 刷新緩沖區(qū)
cerr 流對象是標(biāo)準(zhǔn)錯(cuò)誤流, 被指定為與顯示器關(guān)聯(lián). cerr 的作用是想標(biāo)準(zhǔn)組錯(cuò)誤設(shè)備 (standard error device) 輸出有關(guān)出錯(cuò)信息.
cerr 和 cout 的區(qū)別:
cout 流通常是傳送到顯示器輸出, 但也可以被重新定向輸出到磁盤文件
cerr 流中的信息只能在顯示器輸出
cerr 的用途:
當(dāng)調(diào)試程序時(shí), 往往不希望程序運(yùn)行時(shí)的出錯(cuò)信息被送到其他文件, 而要求在顯示器上及時(shí)輸出, 這是應(yīng)該用 cerr
cerr 流中的信息是用戶根據(jù)需要指定的
案例 (解一元二次方程):
#include <iostream> #include <valarray> using namespace std; int main() { double a, b, c, delta; cout << "please input a, b, c:\n"; cin >> a >> b >> c; if (a==0){ cerr << "a is equal to zero, error!" << endl; }else if((delta = b*b - 4*a*c) < 0){ cerr << "delta < 0, error" << endl; }else{ cout << "x1=" << (-b + sqrt(delta)) / (2*a) << endl; cout << "x1=" << (-b - sqrt(delta)) / (2*a) << endl; } return 0; }
輸出結(jié)果:
colg 流對象也是標(biāo)準(zhǔn)錯(cuò)誤流, 它是 console log 的縮寫. clog 的作用和 cerr 相同, 都是在終端顯示器上顯示出錯(cuò)誤信息.
clog 和 cerr 的區(qū)別:
cerr 是不經(jīng)過緩沖區(qū), 直接向顯示器上輸出有關(guān)信息
clog 中的信息存放在緩沖區(qū), 緩沖區(qū)滿后或遇到 endl 時(shí)向顯示器輸出
關(guān)于“C/C++中I/O進(jìn)階怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。