21.1 ストリームの概念
省略
21.2 標準ストリーム
省略
21.3 演算子で出力を行う
/* 出力演算子を使う(<<) */
省略
/* 改行の指定 */
省略
/* 出力演算子の連続使用 */
省略
/* キャストして出力 */
省略
/* ポインタ値を出力する */
省略
21.4 演算子で入力を行う
/* 入力演算子を使う(>>) */
省略
/* 空白は読み込まない */
省略
/* 入力データを判断する */
/* 入力演算子の連続記述 */
cin >> ch >> dt >> ss;
/* 入力終了の判定 */
21.5 get関数とput関数による文字入出力
/* 参照仮引数スタイルget関数 */
/* 戻り値スタイルget関数とEOF */
21.6 get関数とgetline関数による文字列出力
21.7 ストリームの状態参照
/* エラー状態値 */
ios_base::badbit // 重大な入出力エラー
ios_base::eofbit // ファイル末尾になった
ios_base::failbit // 回復可能な軽いエラー
ios_base::goodbit // エラーなし
/* エラー判定関数 */
bool good(); // エラーなし。
bool eof(); // ファイル末尾になった
bool fail(); // 回復可能な軽いエラー
bool bad(); // 重大な入出力エラー
int rdstate(); // エラー状態フラグの状態をそのまま返す
/* ストリームオブジェクトによるエラー判定 */
ファイルオープンの記述例
ofstream fout;
fout.open("mydata.txt"); // ファイルをオープン
if (fout) { // 正しいなら
...
}
if (!fout) { // エラーなら
...
}
if (fout.good()) { // 正しいなら
...
}
if (fout.fail()) { // エラーなら
...
}
/* エラーフラグのクリア */
21.8 入力演算子利用上の注意点
/* 後続文字が残る */
cin >> ss;の動作
abcdと入力 ==> 'a''b''c''d''n' // 改行が残る
cin.get(c1);の動作
バッファが空にならない ==> 'n'
cin.get(c2);の動作
バッファが空 ==> 'E''n'
よって以下のようにすると良い
(1)文字列入力はなるべくgetline()関数で行う
(2)文字列入力に入力演算子を使ったら、他の入力も入力演算子を使う。
/* 読み込み不一致 */
/* ignoreで読み捨てる */
istream& ignore(int n = 1, int delim = EOF);
文字数がnになるまで(n-1ではない)、文字を取り出し破棄する。
区切り文字delimが取り出されるか、
ファイルの終わりに達すると、取り出し(読み捨て)を終了する。
/* 整数と浮動小数点数の読み込み不一致 */
/* atoi関数と併用する */
21.9 書式付き入出力
/* 書式フラグ */
省略
/* 書式フラグの参照と設定 */
/* 特定ビットだけの設定 */
fmtflags setf(fmtflags flg);
flgで指定したビットを設定する。
他のビットはそのまま維持する。
[flags(flags() | flg)]という処理をする。
fmtflags setf(fmtflags flg, fmtflags mask);
maskで指定したビット位置のみを変換対象としてflgで指定したビットを設定する。
[flags((flags() & ~mask) | (flg & mask))]という処理をする。
void unsetf(fmtflags flg);
flgで指定したビットをクリアする。
[flags(flags() & ~flg)]という処理をする。
/* 書式フィールドを使った設定 */
/* フィールド幅とパディング文字(width,fill) */
/* cin.widthを使う文字列出力 */
cin.width(80); // 最大文字数を指定した入力ができます。
21.10 入出力マニピュレータによる書式設定
/* マニピュレータによる書式設定 */
省略
/* マニピュレータによる基本操作 */
省略
/* マニピュレータによる数値操作 */
省略
/* その他のマニピュレータ */
省略
/* マニピュレータによる入力操作 */
省略
/* マニピュレータによる空白処理 */
21.11 自作のマニピュレータ
21.12 Cスタイル標準入出力
/* バッファの共有 */
省略
/* Cスタイル入出力 */
省略