C++輸入輸出格式控制

C++中輸入輸出的十六進制八進制

1、數的進制

默認進制:

默認狀態下,數據按十進制輸入輸出。如果要求按八進制或十六進制輸入輸出,在cincout中必須指明相應的數據形式,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中指明數制,否則從鍵盤輸入時,不認八進制和十六進制數開頭的00x標誌。指明後可省略00x標誌。
進制控制只適用於整型變量,不適用於實型和字符型變量。
輸入數據的格式、個數和類型必須與cin中的變量一一對應,否則不僅使輸入數據錯誤,而且影響後面其他數據的正確輸入。
cincout中指明數制後,該數制將一直有效,直到重新指明使用其他數制。
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個輸出設置了有效位數0C++最小的有效位數爲1,所以作爲有效位數設置爲1來看待:第36行輸出按設置的有效位數輸出。
   在用定點表示的輸出中,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 設置整數的基數爲
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 設置整數的基數爲
ios::hex 設置整數的基數爲16 
ios::showbase 強制輸出整數的基數(八進制以0打頭,十六進制以0x打頭
ios::showpoint 強制輸出浮點數的小點和尾數
ios::uppercase 在以科學計數法輸出E和十六進制輸出字母X,以大寫表示 
ios::showpos 輸出正數時,給出“+”號.
ios::scientific 設置浮點數以科學計數法(即指數形式)顯示 
ios::fixed 設置浮點數以固定的小數位數顯示 
ios::unitbuf 每次輸出後刷新所有流 
ios::stdio 每次輸出後清除stdout,stderr 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章