歡迎前往我的博客網(wǎng)站:chungzh.cn !
大家好,我是ChungZH!這是我的第二篇博客。在這篇博客中,我將介紹一些有關(guān)C++的iostream和iomanip庫的知識,希望大家喜歡!
首先,我們來看看iostream。
相信大家都知道iostream,這個(gè)庫可以說是最常用的幾個(gè)庫之一了。iostream庫提供了輸入輸出流。比如cin、cout,都是在iostream里的。所以,我們經(jīng)常會用到iostream這個(gè)庫。
iostream這個(gè)名字很好理解,InputOutputStream,輸入輸出流。
我們先看看iostream的代碼:
#include <bits/c++config.h>
#include <ostream>
#include <istream>
// 由于代碼過長,不再繼續(xù)
可以看出,iostream自己又引用了istream和ostream這兩個(gè)頭文件。這兩個(gè)頭文件的名字也很好理解,input stream和output stream。
我們再來分別看看istream和ostream里面又引用了什么:
istream:
#include <ios>
#include <ostream>
ostream:
#include <ios>
#include <bits/ostream_insert.h>
這兩個(gè)頭文件都引用了ios,我們繼續(xù)看看ios的代碼:
#include <iosfwd>
#include <exception>
#include <streambuf>
好了,就到這里吧!其實(shí)iostream還引用了很多頭文件的,我們不必深究。只知道它引用了istream、ostream和ios就行了。
iostream庫定義了以下三個(gè)標(biāo)準(zhǔn)流對象:
cin表示標(biāo)準(zhǔn)輸入(standard input)的istream類對象。cin可以從設(shè)備讀入數(shù)據(jù)。
cout表示標(biāo)準(zhǔn)輸出(standard output)的ostream類對象。cout可以向設(shè)備輸出或者寫數(shù)據(jù)。
cerr表示標(biāo)準(zhǔn)錯(cuò)誤(standard error)的ostream類對象。cerr是導(dǎo)出程序錯(cuò)誤消息的地方,它只能允許向屏幕設(shè)備寫數(shù)據(jù)。
其中,cin和cout是比較常用的。cerr相對比較少用。
這些標(biāo)準(zhǔn)的流對象都有默認(rèn)的所對應(yīng)的設(shè)備,見下表:
| C++對象名 | 設(shè)備名稱 | C中標(biāo)準(zhǔn)設(shè)備名 | 默認(rèn)含義 |
|---|---|---|---|
| cin | 鍵盤 | stdin | 標(biāo)準(zhǔn)輸入 |
| cout | 顯示器屏幕 | stdout | 標(biāo)準(zhǔn)輸出 |
| cerr | 顯示器屏幕 | stderr | 標(biāo)準(zhǔn)錯(cuò)誤輸出 |
好了,對于iostream,我們就講到這里。接下來我們將介紹iomanip。
iomanip提供了一些格式化輸入輸出流的函數(shù)。io代表輸入輸出,manip是manipulator(操縱器)的縮寫。
iomanip中比較常用的函數(shù)有以下幾個(gè):
setw(int n); 預(yù)設(shè)輸出寬度
setfill(Char c); 使用c作為填充字符
setbase(int n); 預(yù)設(shè)整數(shù)輸出進(jìn)制
setprecision(int n) 用于控制輸出流浮點(diǎn)數(shù)的精度,整數(shù)n代表顯示的浮點(diǎn)數(shù)數(shù)字的精度(使用四舍五入)。
講了那么多,還是來個(gè)示例吧:
#include <iostream> // 標(biāo)準(zhǔn)輸入輸出流
#include <iomanip> // 格式控制
using namespace std;
int main()
{
double n;
cin >> n;
// 假設(shè)輸入:123.45
cout << n << endl;
// 輸出: 123.45
cout << setprecision(1) << n <<endl // 控制精度為1,四舍五入后輸出 123.5
<< setprecision(2) << n <<endl; // 控制精度為2,四舍五入后輸出 123.45
cout << setfill('*') << setw(7) << n << endl; // 位寬為7,由于n只有6位,所以左邊補(bǔ)充一個(gè)*,輸出 *123.45
return 0;
}
好了,這篇文章就到這里。如果大家有什么疑問,可以在下方的評論區(qū)提問,我將會一一解答。
謝謝大家!
作者:ChungZH
審校:玉璇簫