2013年8月18日日曜日

標準出力ストリームとは

今回は標準出力ストリームでのデータ出力についての記事です。^^

ずいぶん前に、 std::cout について書いたと思うのですが、これは標準出力ストリームと
いって、いろいろな型の変数や値を標準出力するのに使います。
標準出力先はどこかというと、デフォルトではプログラム実行画面(ディスプレイ)です。

std::cout はこれまでにも何度も使っています。iostream ヘッダをインクルードします。
そして、何度もstd:: を書きたくないために、すぐあとに using namesapce std; を
書いていました。

#include <iostream>

using namespace std;

int main(void)
{
    cout << "Hello, Work!" << endl;

    return 0;
}

ここで、 「<<」についてですが、これは出力ストリーム演算子といいます。
この右に記述した変数や値が出力対象となります。

「<<」 を複数使用すると、変数や値が同時にいくつも出力することができます。

#include <iostream>

using namespace std;

int main(void)
{
  int num = 1;

    cout << "Hello, Work!" << endl;
    cout << "This is Test program No." << num << endl;

    return 0;
}

実行結果
# ./test
Hello, Work!
This is Test program No.1
#

どうでしょうか、printf()関数より簡単ではないでしょうか?

C++ではcout, printf どちらも使うことができますので、必要に応じ使い分けても
いいでしょう。特にデバッグ時はprintf()を使うことが多いかもしれません。(^_^;)

また、std::endl にはバッファからすぐに出力する、改行するという役割があります。
これによって上記プログラムでは、画面に文字列を出力したあとに改行されプロンプトが
すぐ下に来ているのです。(赤#のところです)


出力指定子で書式を指定してみる
次は、以前に少し試した出力指定子での書式の指定方法についてです。
std::cout は、ostreamというクラスのオブジェクトです。このクラスでは、書式指定のための
さまざまなメンバ関数が用意されています。

空白を含めた4文字で表示       0を使って4文字で表示
cout.width(4);                                 cout.fill('0');
cout << 10;                                    cout.width(4);
                                                    cout << 10;
   ↓                     ↓
__10(見えないので__で表記してます)   0010


また、実数を表示する場合は、小数点の前後の桁数を指定します。^^
全体を6文字で、数値の桁数は4桁まで
cout.width(6);
cout.precision(4);  //precision = 精度という意味です
cout << 123.45;
   ↓
_123.45

小数点を含め全体で6文字なので5は表示されません。
そして、空白や小数点を除く整数部分と、小数点以下の数値を合わせて
4桁になっているのがわかりますね^^

文字列の表示形式も同様です。
char string[] = "orange";
cout.width(8); //全体で8文字にしてみます
cout << string << endl;
   ↓
__orange

先頭に空白が入って、右寄せになります。^^

width(), fill(), precision()の指定は出力のたびに行わなければなりません。
(コンパイラによって異なります)

個人的には、あるスコープまでという様に指定できたら便利なのに...
と思ったりもしています(^_^;)



今日の名言
 私は新内閣に加わった方々に述べた言葉を、今ここで議会に向かって繰り返したい。
「私の捧げ得るものは、血、労力、涙と汗だけである。」我々は未曾有の大試練に直面して
いる。 我々の前には、長い苦悩と苦闘に年月が横たわっている。
 我々の政策は何か、と問われたら、私はこう答えるだろう。「それは、神が与えたまう限りの
あらゆる力を動員して、海上に、陸上に、空中に、戦って戦い抜くことである。人類の罪悪
史上いまだかつて例をみない大暴君を相手に戦い抜くことである。」これが我が国の
政策である。
 我が内閣の目的は何か、と問われたら、私はただ一言「勝利!」と答えよう。あらゆる
犠牲を払って勝利を得るのだ。どんな恐ろしい目にあおうと勝利を得るのだ。あらゆる困難を
克服して勝利を得るのだ。勝利なくして、我々の生存はありえないからだ。
                                      ウィンストン・チーチャル

恐怖心は、暴れん坊だが同時に臆病者である。恐怖心を克服するには、
その存在を無視すればよい。あなたにはできるはずだ。
                                      デール・カーネギー