C++語言基礎(25)-C++格式化輸出


 

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

#include <iostream>
#include <iomanip>//不要忘記包含此頭文件
using namespace std;
int main()
{
   int a;
   cout<<"input a:";
   cin>>a;
   cout<<"dec:"<<dec<<a<<endl;  //以十進制形式輸出整數
   cout<<"hex:"<<hex<<a<<endl;  //以十六進制形式輸出整數a
   cout<<"oct:"<<setbase(8)<<a<<endl;  //以八進制形式輸出整數a
   char *pt="China";  //pt指向字符串"China"
   cout<<setw(10)<<pt<<endl;  //指定域寬為,輸出字符串
   cout<<setfill('*')<<setw(10)<<pt<<endl;  //指定域寬,輸出字符串,空白處以'*'填充
   double pi=22.0/7.0;  //計算pi值
   //按指數形式輸出,8位小數
   cout<<setiosflags(ios::scientific)<<setprecision(8);
   cout<<"pi="<<pi<<endl;  //輸出pi值
   cout<<"pi="<<setprecision(4)<<pi<<endl;  //改為位小數
   cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;  //改為小數形式輸出
   return 0;
}

輸出結果:

input a:34↙(輸入a的值)
dec:34                   (十進制形式)
hex:22                   (十六進制形式)
oct:42                   (八進制形式)
         China               (域寬為)
*****China               (域寬為,空白處以'*'填充)
pi=3.14285714e+00        (指數形式輸出,8位小數)
pi=3.1429e+00            (指數形式輸出,4位小數)
pi=3.143                 (小數形式輸出,精度仍為)

二.使用流對象的成員函數控制輸出

除了可以用控制符來控制輸出格式外,還可以通過調用流對象cout中用於控制輸出格式的成員函數來控制輸出格式。用於控制輸出格式的常用的成員函數,如:

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

 

流成員函數setf和控制符setiosflags括號中的參數表示格式狀態,它是通過格式標志來指定的。格式標志在類ios中被定義為枚舉值。因此在引用這些格式標志時要在前面加上類名ios和域運算符“::”

格式標志 作用
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和以十六進制輸出字母時以大寫表示
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);        // 顯示基數符號(0x或)
   cout<<"dec:"<<a<<endl;           // 默認以十進制形式輸出
   cout.unsetf(ios::dec);           // 終止十進制格式設置

   cout.setf(ios::hex);             // 設置以十六進制形式輸出
   cout<<"hex:"<<a<<endl;
   cout.unsetf(ios::hex);           // 終止十六進制形式輸出

   cout.setf(ios::oct);             // 設置以八進制形式輸出
   cout<<"oct:"<<a<<endl;
   cout.unsetf(ios::oct);           // 終止八進制形式輸出

   char *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=";
   cout.width(14);                  // 設置域寬為14
   cout<<pi<<endl;
   cout.unsetf(ios::scientific);    // 終止科學計數法形式輸出

   cout.setf(ios::fixed);           // 設置以定點形式輸出
   cout.width(12);                  // 指定域寬為12
   cout.setf(ios::showpos);         // 正數輸出+號
   cout.setf(ios::internal);        // 數符出現在左側
   cout.precision(6);               // 保留位小數
   cout<<pi<<endl;

   return 0;
}

運行結果:

dec:21(十進制形式)
hex:0x15                 (十六進制形式,以x開頭)
oct:025                  (八進制形式,以開頭)
         China               (域寬為)
*****China               (域寬為,空白處以'*'填充)
pi=**3.142857e+00        (指數形式輸出,域寬,默認位小數)
+***3.142857             (小數形式輸出,精度為,最左側輸出數符“+”)

注意:

1.成員函數width(n)和控制符setw(n)只對其后的第一個輸出項有效

2.對輸出格式的控制,即可以使用控制符,也可以使用cout流有關的成員函數,二者的作用是相同的。控制符是在頭文件iomanip中定義的,因此用控制符時,必須包含iomanip頭文件。cout流的成員函數是在頭文件iostream 中定義的,因此只需包含頭文件iostream,不必包含iomanip。

 


免責聲明!

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



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