1、數的進制
默認進制:
默認狀態下,數據按十進制輸入輸出。如果要求按八進制或十六進制輸入輸出,在cin或cout中必須指明相應的數據形式,oct爲八進制,hex爲十六進制,dec爲十進制。
int i, j, k, l;
cout<<”Input i(oct), j(hex), k(hex), l(dec):”<<endl;
cin>>oct>>i; //輸入爲八進制數
cin>>hex>>j; //輸入爲十六進制數
cin>>k; //輸入仍爲十六進制數
cin>>dec>>l; //輸入爲十進制數
cout<<”hex:”<<”i=”<<hex<<i<<endl;
cout<<”dec:”<<”j=”<<dec<<j<<′\t′<<”k=”<<k<<endl;
cout<<”oct:”<<”l=”<<oct<<l;
cout<<dec<<endl; //恢復十進制輸出狀態
【執行結果】:
(1)輸出提示:Input i(oct), j(hex), k(hex), l(dec):
(2)此時從鍵盤輸入: 032 0x3f 0xa0 17 <CR>
(3)輸出結果爲:
hex:i=1a
dec:j=63 k=160
oct:l=21
幾點說明:
使用不帶.h的頭文件<iostream>時,必須在cin中指明數制,否則從鍵盤輸入時,不認八進制和十六進制數開頭的0和0x標誌。指明後可省略0和0x標誌。
進制控制只適用於整型變量,不適用於實型和字符型變量。
輸入數據的格式、個數和類型必須與cin中的變量一一對應,否則不僅使輸入數據錯誤,而且影響後面其他數據的正確輸入。
在cin或cout中指明數制後,該數制將一直有效,直到重新指明使用其他數制。
2、數據間隔
常用設置方法:輸出空格符或回車換行符。
指定數據輸出寬度:用C++提供的函數setw()指定輸出數據項的寬度。setw()括號中通常給出一個正整數值,用於限定緊跟其後的一個數據項的輸出寬度。如:setw(8)表示緊跟其後的數據項的輸出佔8個字符寬度。
int i=2, j=3;
float x=2.6, y=1.8;
cout<<setw(6)<<i<<setw(10)<<j<<endl;
cout<<setw(10)<<i*j<<endl;
cout<<setw(8)<<x<<setw(8)<<y<<endl;
則輸出結果爲:
2 3
6
2.6 1.8
setw()只能限定緊隨其後的一個數據項,輸出後即回到默認輸出方式。
使用setw()必須在程序開頭再增加一句: #include<iomanip>
#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)是用指數方式表示實數。
例如,下面的代碼分別用浮點、定點和指數方式表示一個實數:
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); //重新設置成原默認設置 |
運行結果爲:
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
C++中cout.setf(iOS::left,ios::adjustfield); cout.setf(ios::showpoint,ios::showpint);
cout.setf(ios::scientific,ios::floatfield);
分別表示什麼
參考以下:
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