C++流格式控制符的使用【來自網絡】


注意添加<iomanip>頭文件。

使用控制符控制輸出格式

控制符

作用

dec

設置整數的基數為10

hex

設置整數的基數為16

oct

設置整數的基數為8

setbase(n)

設置整數的基數為n(n只能是16,10,8之一)

setfill(c)

設置填充字符c,c可以是字符常量或字符變量

setprecision(n)

設置實數的精度為n位。在以一般十進制小數形式輸出時,n代表有效數字。在以fixed(固定小數位數)形式和scientific(指數)形式輸出時,n為小數位數。

setw(n)

設置字段寬度為n位。

setiosflags(ios::fixed)

設置浮點數以固定的小數位數顯示。

setiosflags(ios::scientific)

設置浮點數以科學計數法(即指數形式)顯示。

setiosflags(ios::left)

輸出數據左對齊。

setiosflags(ios::right)

輸出數據右對齊。

setiosflags(ios::shipws)

忽略前導的空格。

setiosflags(ios::uppercase)

在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示。

setiosflags(ios::showpos)

輸出正數時,給出“+”號。

resetiosflags

終止已設置的輸出格式狀態,在括號中應指定內容。

以小數形式,保留三位小數輸出:
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;

====================================================

來自:http://blog.csdn.net/thisispan/article/details/7450411

====================================================

1.流格式控制符定義在<iomanip>頭文件中,


setw(n)                                             指定打印字段的寬度

setprecision(n)                              設置一個浮點數的精度

fixed                                                 將一個浮點數以一個定點數的形式輸出

showpoint                                      將一個浮點數以帶小數,帶結尾是0的形式輸出,即便他沒有小數部分

left                                                    將輸出內容左對齊

right                                                 將輸出內容右對齊


一。setw(n)    

默認情況下,輸出內容需要多少個位置,cout就僅僅占用那么多屏幕位置。你可以使用setw(n),指定一個輸出內容占用多少個位置。

例如:

cout<<setw(8)<<"C++"<<setw(6)<<"101"<<endl;

這樣 c++之前打印5個空位置,(注意:是之前),,101之前打印3個空位置。


setw(n)每次只作用一個輸出字段,所以,要想每個字段輸出都設置寬度,必須每次都要寫一遍setw(n)


二。setprecision(n)


setprecision(n)指定一個浮點數的精度。


1.)可以指定一個浮點數打印幾位數字,其中n是總位數!!包括小數之前和之后的數字。超出的位數會被四舍五入進去!!!

(setprecision(n)不是舍棄,在高精度向低精度轉換時,超出部分會被舍棄,如一個double k =1.5,int i = k ,這時候0.5被舍去,i  = 1,

高精度向低精度轉換超出位數會被舍棄!

例如

double num = 1.23456;

cout<<setprecision(2)<<num<<endl;   ---- 輸出1.2

cout<<setprecision(4)<<num<<endl;   ---- 輸出1.235

cout<<setprecision(5)<<num<<endl;   ---- 輸出1.22346


2)與setw()不同setprecision(n)一直作用到下一個setprecisin(n)之前所以,只需要寫一個setprecision(n)就可以setw()要每次都寫

C++四舍五入用


三。fixed

fixed可以強制數值不以科學技術法顯示,即只用小數形式顯示。

(在遇見大的浮點數時候,計算機會以科學技術法形式顯示浮點數)


默認情況下,使用fixed之后,小數點后面數字位數為6,

如:double i  = 1.23;

cout<<fixed<<i<<endl;

會輸出1.230000

3)我們可以使用fixed和setprecision(n)一起使用的方法,來改變這個小數點后的位數,當setprecision(n)作用於fixed之后時候,

setprecision(n)指定的是小數點后的數字位數

如:double k = 3.141592653;

cout<<fixed<<setprecision(2)<<k<<endl;

輸出:3.14

這時候,后面也會四舍五入,,即只要用了setprecision(n)就會四舍五入!!!!

4)一旦使用了fixed之后,它會作用於后面所有的浮點數.

5)注意,默認情況下,沒有小數的部分不會顯示小數點。但使用fixed之后,會強制顯示小數點。

如double i= 1;

cout<<fixed<<i<<endl;

顯示 1.000000




四。showpoint (與setprecision(n)一起使用)

showpoint 強制小數后面以0顯示。

cout<<setprecision(6);

cout<<showpoint<<1.23<<endl; ----顯示 1.23000

cout<<showpoint<<123.0<<endl; ----顯示 123.000


五。right /left  對齊方式


大多數系統默認情況下為右對齊,

可以使用;eft ,將輸出格式左對齊

用法

cout<<left;

cout<<setw(8)<<1.23<<endl;

cout<<setw(8)<<1.23456<<endl;

 

 

==============================================================

下面來自:http://blog.sina.com.cn/s/blog_749f55cd0100p8up.html

==============================================================

1.使用控制符控制輸出格式

控制符  作用 
dec  設置整數的基數為10 
hex  設置整數的基數為16 
oct  設置整數的基數為8 
setbase(n)  設置整數的基數為n(n只能是16,10,8之一) 
setfill(c)  設置填充字符c,c可以是字符常量或字符變量 
setprecision(n)  設置實數的精度為n位。在以一般十進制小數形式輸出時,n代表有效數字。在以fixed(固定小數位數)形式和scientific(指數)形式輸出時,n為小數位數。 
setw(n)  設置字段寬度為n位。 
setiosflags(ios::fixed)  設置浮點數以固定的小數位數顯示。 
setiosflags(ios::scientific)  設置浮點數以科學計數法(即指數形式)顯示。 
setiosflags(ios::left)  輸出數據左對齊。 
setiosflags(ios::right)  輸出數據右對齊。 
setiosflags(ios::shipws)  忽略前導的空格。 
setiosflags(ios::uppercase)  在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示。 
setiosflags(ios::showpos)  輸出正數時,給出“+”號。 
resetiosflags  終止已設置的輸出格式狀態,在括號中應指定內容。 

2.用流對象的成員控制輸出格式

流成員函數  與之作用相同的控制符  作用 
precision(n)  setprecision(n)  設置實數的精度為n位。 
width(n)  setw(n)  設置字段寬度為n位。 
fill(c)  setfill(c)  設置填充字符c。 
setf( )  setiosflags( )  設置輸出格式狀態,括號中應給出格式狀態,內容與控制符setiosflags括號中內容相同。 
ubsetf( )  resetiosflags( )  終止已設置的輸出格式狀態。 

cout.width(10);
cout.setf(ios::hex);

3.設置格式狀態的格式標志

格式標志  作用 
ios::left  輸出數據在本域寬范圍內左對齊 
ios::right  輸出數據在本域寬范圍內右對齊 
ios::internal  數值的符號位在域寬內左對齊,數值右對齊,中間由填充字符填充 
ios::dec  設置整數的基數為10 
ios::oct  設置整數的基數為8 
ios::hex  設置整數的基數為16 
ios::showbase  強制輸出整數的基數(八進制以0打頭,十六進制以0x打頭) 
ios::showpoint  強制輸出浮點數的小點和尾數0 
ios::uppercase  在以科學計數法輸出E和十六進制輸出字母X時,以大寫表示 
ios::showpos  輸出正數時,給出“+”號。 
ios::scientific  設置浮點數以科學計數法(即指數形式)顯示 
ios::fixed  設置浮點數以固定的小數位數顯示 
ios::unitbuf  每次輸出后刷新所有流 
ios::stdio  每次輸出后清除 stdout,stderr 

 
#include <iostream>
using namespace std;
int main()
 { int a=21;
   cout.setf(ios::showbase); //設置輸出時的基數符號
   cout<<"dec:"<<a<<endl; //默認以十進制形式輸出a
   cout.unsetf(ios::dec); //終止十進制的格式設置
   cout.setf(ios::hex); //設置以十六進制輸出的狀態
   cout<<"hex:"<<a<<endl; //以十六進制形式輸出a
   cout.unsetf(ios::hex); //終止十六進制的格式設置
   cout.setf(ios::oct); //設置以八進制輸出的狀態
   cout<<"oct:"<<a<<endl; //以八進制形式輸出a
   cout.unsetf(ios::oct); //終止以八進制的輸出格式設置
   char *pt="China"; //pt指向字符串”china”
   cout.width(10); //指定域寬為10
   cout<<pt<<endl; //輸出字符串
   cout.width(10); //指定域寬為10
   cout.fill('*'); //指定空白處以'*'填充
   cout<<pt<<endl; //輸出字符串
   double pi=22.0/7.0; //計算pi值
   cout.setf(ios::scientific);//指定用科學記數法輸出
   cout<<"pi="; //輸出"pi="
   cout.width(14); //指定域寬為14
   cout<<pi<<endl; //輸出"pi值
   cout.unsetf(ios::scientific); //終止科學記數法狀態
   cout.setf(ios::fixed); //指定用定點形式輸出
   cout.width(12); //指定域寬為12
   cout.setf(ios::showpos); //在輸出正數時顯示“+”號
   cout.setf(ios::internal); //數符出現在左側
   cout.precision(6); //保留6位小數
   cout<<pi<<endl; //輸出pi,注意數符“+”的位置
   return 0;}
運行情況如下:
    dec:21 (十進制形式)
    hex:Oxl5 (十六進制形式,以0x開頭)
    oct:025 (八進制形式,以O開頭)
    China (域寬為10)
    *****china (域寬為10,空白處以'*'填充)
    pi=**3.142857e+00 (指數形式輸出,域寬14,默認6位小數)
    ****3.142857 (小數形式輸㈩,精度為6,最左側輸出數符“+”)
 

說明:
1、成員函數width(n)和控制符setw(n)只對其后的第一個輸出項有效。如果要求在輸出數據時都按指定的同一域寬n輸出,不能只調用一次width(n),而必須在輸出每一項前都調用一次width(n)。
2、在表5中的輸出格式狀態分為5組,每一組中同時只能選用一種(例如,dec,hex和oct中只能選一,它們是互相排斥的),在用成員函數serf和 控制符setiosflags設置輸出格式狀態后,如果想改設置為同組的另一狀態,應當調用成員函數unsetf(對應於成員函數serf)或 resetiosflags(對應於控制符sefiosflags),先終止原來設置的狀態。然后再設置其他狀態。
同理,程序倒數第8行的unsetf函數的調用也是不可缺少的。讀者不妨上機試一試。
3、用serf函數設置格式狀態時,可以包含兩個或多個格式標志,由於這些格式標志在lOS類中被定義為枚舉值,每一個格式標志以一個二進位代表,因此可以用“位或”運算符“I”組合多個格式標志
4、可以看到:對輸出格式的控制,既可以用控制符(如例2),也可以用cout流的有關成員函數(如例3),二者的作用是相同的。控制符是在頭文件 mmamp中定義的,因此用控制符時,必須包含iomanip頭文件。cout流的成員函數是在頭文件iostream中定義的,因此只需包含頭文件 iostream,不必包含iomanip。許多程序人員感到使用控制符方便簡單,可以在一個cout輸出語句中連續使用多種控制符。
5、關於輸山格式的控制,在使用中還會遇到一些細節問題,不可能在這里全部涉及。在遇到問題時,請查閱專門手冊或上機試驗一下即可解決。


以小數形式,保留三位小數輸出:
cout<<setprecision(3)<<setiosflags(ios::fixed)<<3.1415926<<endl;
 
//<iomanip>在使用流操縱算子時使用  
03.//using namespace std;  
04. 
05.//以下所有的setf()都有對應的unsetf()用於取消設置  
06.//所有的setiosflags()可以用resetiosflags()取消  
07.//標志位fmtflags的命名空間可以使用ios_base::或者ios::  
08. 
09.int laneri = 12345;  
10.double lanerd = 56789;  
11. 
12.//1、設置整數進制輸出  
13.//重載1:fmtflags ios_base::setf(fmtflags _Mask);  
14.//重載2:fmtflags ios_base::setf(fmtflags _Mask, fmtflags _Unset);  
15.//使用重載1的時候,一定要先取消當前基,之后才可以設置新的基  
16.//使用重載2的時候,第二個參數設為當前的基,或者當不知道當前基時,設為ios_base::basefield清除當前的所有可能的基  
17.//可使用的標志:ios::dec, ios::oct, ios::hex, ios::basefield(= dec|oct|hex)  
18.cout.unsetf(ios::dec);   //等價1  
19.cout.setf(ios::hex);  
20.cout.setf(ios::hex, ios_base::basefield); //等價2  
21.cout<<laneri<<endl;  
22.cout<<setiosflags(ios::hex)<<laneri<<endl; //等價3  
23.cout<<std::hex<<laneri<<endl;   //等價4  
24.//使用輸入輸出操縱符也能有等價效果(命名空間使用std::,否則會有多余的字符),注意這種方法其實不止對本句生效  
25. 
26.//2、 顯示進制前導字符(0、0x)  
27.cout.setf(ios::showbase);  
28.cout<<setiosflags(ios::showbase)<<laneri<<endl;  
29.cout<<std::showbase<<laneri<<endl;  
30. 
31.//3、使用科學記數法  
32.//只對數據類型為小數的變量有效(或者字面值是小數)  
33.//對precision有影響(詳見precision的說明)  
34.//對ios::fixed有影響(詳見fixed的說明),但不會被fixed影響  
35.cout.setf(ios::scientific);  
36.cout<<lanerd<<endl;  
37.cout<<setiosflags(ios::scientific)<<lanerd<<endl;  
38.cout<<std::scientific<<lanerd<<endl;  
39. 
40.//4、設置小數的浮點/定點顯示方式  
41.//主要依靠precision體現(詳見precision的說明)  
42.//當設置了ios::scientific標志時,ios::fixed會受到影響,std::fixed不會  
43.cout.setf(ios::fixed);   
44.cout<<lanerd<<endl;  
45.cout<<setiosflags(ios::fixed)<<lanerd<<endl;   
46.cout<<std::fixed<<lanerd<<endl;   
47. 
48.//5、設置小數數據類型的顯示精度,受到scientific和fixed的影響  
49.//當設置(fixed | scientific)時,precision(n)表示小數點后固定顯示n位小數  
50.//當不設置(fixed & scientific)時,precision(n)表示固定顯示n位數字  
51.// 其中,當是整數且位數m小於n,而又沒有設置showpoint的時候,只顯示m位整數。例如:precision(3),12->12  
52.// 其中,當是整數且位數p大於n,無論設置showpoint與否,都四舍五入后使用科學計數法。例如:precision(3),1234->1.23e+003  
53.cout.precision(3);  
54.cout<<lanerd<<endl;  
55.cout<<setprecision(3)<<3.1415926<<endl;  
56.    
57.//6、強制浮點數類型變量的小數點顯示  
58.//如果是整數,大於precision寬度時使用科學計數法,小於precision則小數點后面補0,等於precision時顯示小數點但無小數  
59.//例:不設fixed,precision(6): 1234567->1.23457E+006;   12345->12345.0;    123456->123456.  
60.//  設fixed,precision(6): 1234567->1234567.000000; 12345->12345.000000; 123456->123456.000000  
61.cout.setf(ios::showpoint);  
62.cout<<setiosflags(ios::showpoint)<<lanerd<<endl;  
63.cout<<std::showpoint<<lanerd<<endl;  
64. 
65.//7、設置屏幕上的最小顯示寬度  
66.//實際字符數大於等於這個數字,顯示全部;小於這個數字,用fill()設置的字符來填充其他占位符  
67.//注意:寬度設置只對下一個"<<"輸出有效  
68.//例如:cout<<setw(10)<<right<<"laner"<<"linke";只有"laner"是占10個字符,linke不是  
69.cout.width(12);  
70.cout<<setw(12)<<3.14<<endl;  
71. 
72.//8、顯示對齊方式,默認為左對齊  
73.cout.setf(ios::right);  
74.cout<<setiosflags(ios::right)<<laneri<<endl;  
75.cout<<std::right<<6.28<<endl;  
76. 
77.//9、設置不足顯示寬度時的填充字符,默認為' '  
78.cout.fill('*');  
79.cout<<setfill('$')<<laneri<<endl; 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM