c++教程之格式化輸出--操作符實現


  我們平時自己使用cout的時候一般是沒有什么特殊的格式要求的,但是以后可能會遇到需要格式化輸出的情況,所以這里講一下cout的格式輸出的方法,還在不復雜。

  一、使用setw()來控制占位寬度

    先寫一個例子,然后再講注意事項。

    

 1 #include <iostream>
 2 #include <iomanip> //格式化輸出的頭文件,注意這里不要加.h
 3 
 4 using namespace std; //命名空間
 5 
 6 int main()
 7 {
 8     int num1 = 1234,num2 = 1,num3 = 555556;
 9     int num4 = 78,num5 = 4689,num6 = 9;
10     char * a = "hello";
11     char * b = "c++ ";
12         
13     cout << "第一行數字:";
14     cout << setw(5) << num1;
15     cout << setw(5) << num2;
16     cout << setw(5) << num3;
17     cout << endl;
18 
19     
20     cout << "第二行數字:";
21     cout << setw(5) << num4;
22     cout << setw(5) << num5;
23     cout << setw(5) << num6;
24     cout << endl;
25     cout << endl;
26 
27     cout << "第一個字符串:" << setw(5) << a << endl;
28     cout << "第二個字符串:" << setw(5) << b << endl;
29     return 0;
30 }

    首先從結果中可以看出,setw是設置輸出的寬度,並且是采用右對齊的形式,也就是說在不足5位的數前面添加空格。

    注意事項:

      1. setw() 雖然帶有括號,但是其實是一個操作符,並不是函數。
      2. setw() 主要引用頭文件 iomanip 才能使用。
      3. 如果setw() 所約束的輸出超過了限制,不會被截斷。是多少位就輸出多少位。
      4. 如果輸出是浮點數,小數點也會占一個位。
      5. 如果輸出是字符串,空格有段有效字符,占一個位。從上面的輸出結果也可以看出來。
      6. setw() 只能約束住跟自己相鄰的一個輸出。也就是說 
    int val1 = 1,val2 = 23;
  1. cout << setw(3) << val1 << val2 << endl;
       這個輸出結果是val1 占3位,val2 占2位。    

  二、使用setprecision()控制浮點數有效位

    依舊先看程序,在解釋。

 1 #include <iostream>
 2 #include <iomanip>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     float num1 = 123.456f,num2 = 563.1f,num3 = 1.30f;
 9     float num4 = 123456.4444f;
10     cout << setprecision(4);
11     cout << "第一個數:" << num1 << endl;
12     cout << "第二個數:" << num2 << endl;
13     cout << "第三個數:" << num3 << endl;
14     cout << "第四個數:" << num4 << endl;
15 
16     return 0;
17 }

 

    從運行結果可以看出來,setprecision()是控制浮點數的有效位數。

      注意事項

      1. setprecision() 同樣是一個操作符,需要包含頭文件 iomanip。
      2. 如果輸出浮點數不足位,不會在其后面補0。
      3. 如果末尾有0,默認是不輸出的。后面我們有其他方法可以輸出末尾的0。
      4. setprecision() 不同於setw(),setprecision() 設置之后,在下次設置之前都是有效的。從程序結果中可以看出來。
      5. 如果要輸出的位數過多,則用科學計數法表示,10為基數。從程序結果中可以看出來。

    

  三、setfioflags() 控制定點輸出

    程序如下:

 1 #include <iostream>
 2 #include <iomanip>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     float num1 = 13.000f,num2 = 14.568f,num3 = 1.2f;
 9     cout << setiosflags(ios::fixed|ios::showpoint);
10     cout << setprecision(4);
11     cout << "第一個數:" << num1 << endl;
12     cout << "第三個數:" << num2 << endl;
13     cout << "第二個數:" << num3 << endl;
14 
15     return 0;
16 }

 

    從結果中可以看出,輸出的浮點數都有四位小數。

      注意事項:

      1. setiosflags() 是通過狀態標志來實現對輸出的控制的。狀態標志功能如下表:
   狀態標志       功能    
  ios::left   左對齊,右邊填空格
  ios::right   右對齊,左邊填空格
  ios::fixed   以定點形式輸出浮點數
  ios::scientific   以科學計數法形式輸出浮點數  
  ios::dec   所有整數以十進制輸出
  ios::hex   所有整數以十六進制輸出
  ios::oct   所有整數以八進制輸出
  ios::showpoint   顯示小數點和尾部的零
  ios::showpos   在正數前面輸出+
i  os::uppercase   對於十六進制輸出,使用大寫字母表示  

 

setiosflags() 需要與 setprecision() 一起使用。如果狀態標志設為 ios::fixed,那么setprecision()設置的數字,就表示小數位的個數,不足補零。 

 

    如有錯誤,請指出!!明天寫成員函數實現。


免責聲明!

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



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