引言:大家在寫程序中多多少少會遇到這個問題,特別對一些初學者會出現這個問題,做個ACM競賽的同學肯定都會用C語言的printf格式控制輸出,但是習慣於用C++的同學也不是一點辦法都沒有啊,這篇blog中會介紹C++中如何使用,雖然稍微復雜一定,但是也不失為一種方法。
首先看一下代碼(以求四個整數的和與平均值為例):
//求四個整數的和與平均值 #include<iostream> #include<iomanip> using namespace std; int main() { int a,b,c,d,e; double f; cin>>a>>b>>c>>d; e=a+b+c+d;//e存放和 ,為整數 f=(double)e/4;//f存放平均值 ,為double printf("%d %.1f\n",e,f); //C語言控制格式輸出,小數點后面保留一位小數 //C++輸出流格式控制輸出 cout<<e<<" "<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(1)<<f; return 0; }
可以看到C語言的printf是很容易控制格式的,"%m.nf":輸出浮點數,m為寬度,n為小數點右邊數位
同時注意到C++的cout輸出流中使用到了兩個函數setiosflags()和setprecision()
下面介紹一下這兩個函數:
setiosflags()函數:setiosflags 是包含在命名空間iomanip 中的C++ 操作符,該操作符的作用是執行由有參數指定區域內的動作;
iso::fixed 是操作符setiosflags 的參數之一,表示以定點的方式輸出實數;
iso::right 也是setiosflags 的參數,該參數的指定作用是在指定區域內右對齊輸出;
setprecision()函數:setprecision(n)可控制輸出流顯示浮點數的數字個數為n。C++默認的流輸出數值有效位是6
cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(1);
合在一起的意思就是:輸出一個右對齊的小數點后1位的浮點數,即作用是:控制小數點右邊的位數。
參考資料: