数表のような形式でデータを出力するのに、 C では printf() で様々な書式指定をする。 もちろん C++ は C のスーパーセットなので、 printf() を使うことも可能だが、 cout ストリームと併用するのは気持ちが悪い。 以下にどうすれば良いか説明するが、あまりすっきりしない。 多くの人が C++ でも printf() を使い続けているようだが、 この辺に理由があるのかもしれない。
cout.form("N=%d, t=%g, error=%e\n", N, t, error); |
printf("N=%2d, m=%3d\n", N, m); |
cout << "N="; cout.width(2); cout << N << ", m="; cout.width(3); cout << m << endl; |
#include <iomanip.h> ... cout << setw(2) << N << ", m=" << setw(3) << m << endl; |
cout.setf(ios::fixed, ios::floatfield); |
#include <iomanip.h> ... cout << setiosflags(fixed) |
cout.unsetf(ios::fixed, ios::floatfield); |
#include <iomanip.h> ... cout << resetiosflags(fixed) |
cout.setf(ios::scientific, ios::floatfield); |
#include <iomanip.h> ... cout << setiosflags(scientific) |
cout.unsetf(ios::scientific, ios::floatfield); |
#include <iomanip.h> ... cout << resetiosflags(scientific) |
cout.precision(整数式); |
#include <iomanip.h> .... cout << setprecision(整数式) |
format-sample.C |
#include <iostream.h> #include <iomanip.h> int main() { int N; double x, y, z; N = 8; x = 1.234567890123; y = 123.4567890123; z = 123.4567890123; cout.form("N=%2d, x=%g, y=%22.15f, z=%e\n", N, x, y, z); cout << "N=" << setw(2) << N << ", x=" << x << ", y=" << setiosflags(ios::fixed) << setw(22) << setprecision(15) << y << resetiosflags(ios::fixed) << setprecision(6) << ", z=" << setiosflags(ios::scientific) << z << endl; return 0; } |
実行結果 |
yurichan% program-cpp/format-sample N= 8, x=1.23457, y= 123.456789012300007, z=1.234568e+02 N= 8, x=1.23457, y= 123.456789012300007, z=1.234568e+02 yurichan% |