C++ の入出力ストリームは, マニピュレータによって操作をことができる.
std::endl は, ‘n’ を出力した上, バッファをフラッシュする:
std::cout << "Hello C World" << std::endl;
‘n’ を直接書くのではなく, std::endl にお任せてしまう. しかし, 改行したくない場合も当然ある. その場合には, 代わりのマニピュレータとして, std::flush を使う. これは文字通り, フラッシュだけを行う.
また, std::ends は, バッファに ‘0’ を出力する. ‘0’ は文字列の終端に付く終端文字のこと.
mani.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream>
int main(){
char str[20];
std::cout << "Hello C World" << std::endl;
std::cout << "flush test" << std::flush << std::endl;
std::cout << "std::ends test" << std::ends << std::ends << std::endl;
std::cin >> std::ws >> str;
std::cout << str << std::endl;
return 0;
}
|
mani.cpp の実行結果は:
[wtopia cpp.lang]$ ./mani
Hello C World
flush test
std::ends test
wtopia's home is great!
wtopia's
数値を 8 進数, 10 進数, 16 進数のそれぞれで入出力するためのマニピュレータが用意されている:
std::oct -> 8 進数
std::dec -> 10 進数
std::hex -> 16 進数
mani2.cpp
1 2 3 4 5 6 7 8 9 10 11 | #include <iostream>
int main(){
int num = 100;
std::cout << std::dec << num << std::endl; // 10 進数
std::cout << std::oct << num << std::endl; // 8 進数
std::cout << std::hex << num << std::endl; // 16 進数
return 0;
}
|
mani2.cpp の実行結果は:
[wtopia cpp.lang]$ ./mani2
100
144
64
std::setw を使って, 入出力ともに利用できる. いずれの場合も, 入出力の最大のバイト数を指定する:
std::cout << std::setw(3) << "Hello C World" << std::endl; // "Hel" と '\n' を出力
std::cin >> std::setw(10) >> str; // 10 文字分の入力を受け取る
std::left と std::right は, 出力したデータをそれぞれ, 左揃え, 右揃えに整形する.
最後に std::setfill を使うと, 出力時に指定した文字を充填できる.
mani3.cpp
1 2 3 4 5 6 7 8 9 | #include <iostream>
#include <iomanip>
int main(){
std::cout << std::setw(10) << std::setfill('A') << "wtopia" << std::endl;
return 0;
}
|
mani3.cpp の実行結果は:
[wtopia cpp.lang]$ g++ -Wall -O2 -o mani3 mani3.cpp
[wtopia cpp.lang]$ ./mani3
AAAAwtopia