我們平時自己使用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位的數前面添加空格。
注意事項:
-
- setw() 雖然帶有括號,但是其實是一個操作符,並不是函數。
- setw() 主要引用頭文件 iomanip 才能使用。
- 如果setw() 所約束的輸出超過了限制,不會被截斷。是多少位就輸出多少位。
- 如果輸出是浮點數,小數點也會占一個位。
- 如果輸出是字符串,空格有段有效字符,占一個位。從上面的輸出結果也可以看出來。
- setw() 只能約束住跟自己相鄰的一個輸出。也就是說
- 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()是控制浮點數的有效位數。
注意事項
-
-
- setprecision() 同樣是一個操作符,需要包含頭文件 iomanip。
- 如果輸出浮點數不足位,不會在其后面補0。
- 如果末尾有0,默認是不輸出的。后面我們有其他方法可以輸出末尾的0。
- setprecision() 不同於setw(),setprecision() 設置之后,在下次設置之前都是有效的。從程序結果中可以看出來。
- 如果要輸出的位數過多,則用科學計數法表示,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 }
從結果中可以看出,輸出的浮點數都有四位小數。
注意事項:
-
-
- 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()設置的數字,就表示小數位的個數,不足補零。
如有錯誤,請指出!!明天寫成員函數實現。