#include <iostream> //不要用iostream.h ,會出現好多問題#include <iomanip> // io 流量控制標頭檔, 主要是一些操縱用法如setw(int n),setprecision(int n) ,setbase(int n),setfill(char c)的.
▲setw(n)用法: 通俗地講就是預設寬度
如 cout<<setw(5)<<255<<endl;
結果是:
(空格)(空格)255
▲setfill(char c) 用法 : 就是在預設寬度中如果已存在沒用完的寬度大小,則用設定的字元c填充
如 cout<<setfill('@')<<setw(5)<<255<<endl;
結果是:
@@255
▲setbase(int n) : 將數字轉換為 n 進位.
如 cout<<setbase(8)<<setw(5)<<255<<endl;
cout<<setbase(10)<<setw(5)<<255<<endl;
cout<<setbase(16)<<255<<endl;
結果是:
(空格)(空格)377
(空格)(空格) 255
(空格)(空格) ff
▲ setprecision用法
使用setprecision(n)可控制輸出資料流顯示浮點數的數字個數。C++預設的流輸出數值有效位是6。
如果setprecision(n)與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。setiosflags(ios::fixed)是用定點方式表示實數。
如果與setiosnags(ios::scientific)合用, 可以控制指數標記法的小數位元。setiosflags(ios::scientific)是用指數方式表示實數。
例如,下面的代碼分別用浮點、定點和指數方式表示一個實數:
#include <iostream>#include <iomanip>int main(){ double amount = 22.0/7; cout << amount << endl; cout << setprecision(0) << amount << endl << setprecision(1) << amount << endl << setprecision(2) << amount << endl << setprecision(3) << amount << endl << setprecision(4) << amount << endl; cout << setiosflags(ios::fixed); cout << setprecision(8) << amount << endl; cout << setiosflags(ios::scientific) << amount <<endl; cout <<setprecision(6); //重新設定成原預設設定 return 0;}
運行結果為:
3.14286
3
3
3.1
3.14
3.143
3.14285714
3.14285714e+00
該程式在32位機器上運行通過。
在用浮點表示的輸出中,setprecision(n)表示有效位元。
第1行輸出數值之前沒有設定有效位元,所以用流的有效位元預設設定值6:第2個輸出設定了有效位元0,C++最小的有效位元為1,所以作為有效位元設定為1來看待:第3~6行輸出按設定的有效位元輸出。
在用定點表示的輸出中,setprecision(n)表示小數位元。
第7行輸出是與setiosflags(ios::fixed)合用。所以setprecision(8)設定的是小數點後面的位元,而非全部數字個數。
在用指數形式輸出時,setprecision(n)表示小數位元。
第8行輸出用setiosflags(ios::scientific)來表示指數表示的輸出形式。其有效位元沿用上次的設定值8。
setw(n)是設定域寬。
就是你的輸出要佔多少個字元。
比如:
cout<<setw(5)<<12345<<endl;
就輸出:
12345
cout<<setw(6)<<12345<<endl;
輸出:
12345
而如果你要輸出的字元寬度超出了setw(n)的n值,就按輸出字元的寬度輸出。
如你的cout<<setw(4)<<12.3456<<endl;
就輸出12.3456