C++のIOライブラリ(四)

3074 ワード

場所:基地2階
時間:2014.03.20
--------------------------------------------------------------------
一、フォーマット入出力
条件状態各iostreamオブジェクトに加えて、フォーマット状態制御IOのフォーマットの詳細も維持されます.たとえば、整数値進数、浮動小数点値精度、出力要素の幅などです.
1.1マニピュレータによるフォーマット状態の変更
マニピュレータは関数またはオブジェクトであり、ストリームの状態に影響し、入力演算子または出力演算子の演算オブジェクトとして使用できます.たとえば、オペレータendlでは、値のように出力ストリームに「書き込み」できますが、通常の値ではなく、改行を出力してバッファをリフレッシュするための操作です.
マニピュレータは、制御数値出力形式と制御パッチ数と位置の2つに分類されます.フォーマットの状態を変更するマニピュレータの多くは、デフォルトのフォーマットに復元された設定/復元ペアで表示されます.マニピュレータがストリームのフォーマット状態を変更すると、通常、変更された状態は後続のIOすべてに有効になります.特別なフォーマットが必要ない場合は、ストリームをできるだけ早くデフォルトの状態に戻すことをお勧めします.
1.1.1ブール値のフォーマットの制御
オペレータがオブジェクトのフォーマット状態を変更するのは、boolalphaオペレータでブール値の表示フォーマットを制御するのが一般的です.デフォルトではbool値は1(true)または0(false)と印刷され、このフォーマットを上書きするためにboolalphaオペレータを対流で使用することができます.オペレータnoboolalphaは、デフォルトのフォーマットを復元するのに役立ちます.テストプログラムは次のとおりです.
#include<iostream>
using namespace std;
int main(){
	cout << "default bool values: " << true << " " << false << endl
		 << boolalpha 
		 <<"aopha bool valuse: " 
		 <<true << " " << false <<endl
		 <<"recover default bool values: "
		 <<noboolalpha                           //              
		 <<true<<" "<<false
		 <<endl;
}

1.1.2制御整数値進数
Hex-16進出力
oct-8進出力
dec-十進法これらのマニピュレータの使い方はendlなどと同じです.ただし、この3つは整数演算オブジェクトにのみ影響し、浮動小数点値には影響しません.
1.1.3出力での指定
デフォルトのフォーマットでは、数値を印刷するときに進数は表示されません.showbaseマニピュレータを使用して、次のように指定できます.
先頭0 xは16進を表す
先頭0は8進数を表します
プリアンブルなし10進数
一方、noshowbaseはストリーム状態を回復し、整数値を表示しません.16進数といえば、アルファベットの大文字と小文字に関連し、デフォルトのフォーマット状態は小文字であり、マニピュレータuppercaseを使用してアルファベットを大文字にすることができ、対応するnouppercaseはアルファベットを小文字モードに戻すことができます.次のようになります.
cout<<nouppercase<<noshowbase<<dec<<endl;   

大文字で表される16進数からデフォルトの10進数フォーマットのステータス表示に復元するのによく使用されます.
 
1.1.4制御浮動小数点数フォーマット
デフォルトでは、浮動小数点値は6桁の数値精度で印刷され、小数点がなければ小数点は印刷されず、浮動小数点数の値に基づいて定点10進法または科学カウント法の形式に印刷され、非常に大きい値または非常に小さい値は科学カウント法に印刷され、その他は定点10進法に印刷され、良好な可読性を保証します.
a.浮動小数点数印刷精度の指定
精度は印刷された数字の総数を制御することができ、IOオブジェクトのprecisionメンバーを呼び出すかsetprecisionマニピュレータを使用することができます(ヘッダファイルiomanipで定義)で精度を変更します.precisionメンバー関数はリロードされ、1つのバージョンはint値を受け入れ、精度をこの値に設定し、古い精度値を返します.また、1つのバージョンはパラメータを受け入れず、現在の精度値を返し、setprecisionオペレータは精度を設定するためのパラメータを受け入れます.テストプログラムは次のとおりです.
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	cout << "Default percision: " << cout.precision() << "Value: " << sqrt(2) << endl;
	cout << "Set 12 percision with precision function: " << cout.precision(12) << " Value: " << sqrt(2)<<endl;
	cout << "Set 3 percision with setprecision: " << setprecision(3) << "Value: " << sqrt(2) << endl;
}

さあ、ここは今日から学びましょう.次は続きます....