2013年8月22日木曜日

標準入力ストリームとは?

これまでは、データを出力する話でしたが、今回からデータ入力もできるようになります^^

std::cin
C++では、キーボードから入力したデータを受け取る場合に 標準入力ストリームである
std::cin を使うことができます。デフォルトの標準入力はキーボードとなっています。
cin は istreamクラスのオブジェクトです。
次の例を見てください。

//std::cin を使うためには、iostream をインクルードしてください
#include <iostream>

using namespace std; //std::cin を cin に、std::cout, std::endlのstd::を書かないため

int main(void)
{
    int num = 0;
    cout << "Please input favorite number." << endl;
    cin >> num;

    cout << "Input number is " << num << endl;

    return 0;
}

実行結果  赤字の4がキー入力です
# ./test
Please input favorite number.
4
Input number is 4


つづいて、文字列の入力を試してみます^^
#include <iostream>

using namespace std;  //どうしてもstd::を書きたくない

int main(void)
{
    char name[50];
    cout << "Please input your name." << endl;
    cin >> name;  //入力された文字列を変数nameに格納します

    cout << "Hello,  " << name << ". How are you?" << endl;

    return 0;
}

実行結果  赤字がキー入力です
# ./test2
Please input your name.
K.Yamagata
Hello,  K.Yamagata. How are you?

cinを使うとscanf()関数と同様に1文字がスペースやタブで区切られて格納されます。
そのため以下のような入力をした場合、スペースのあとの文字は格納されません。
# ./test2
Please input your name.
K Yamagata //K と Yamagataの間にスペースを入れてEnter
Hello,  K. How are you?  //Kだけ表示された

もしスペース以下も格納したい場合は次のようにしてください。^^
//std::cinのメンバ関数 getline を使っています
cin.getline(name, sizeof(name));

標準入出力を使用するメリット
coutやcinでは、printf()やscanf()関数と比べると、書式と変数の対応を意識しなくて
よいので便利です。またcinでは変数に&をつけるのかなどと悩む必要もありません。

cout, cin せっかくなので、どんどん使っていきたいと思います(^^)



今日の名言
長生きすればするほど、物事に没頭できる人は、人間として一番大切な資格または天性を
備えている、と確信するようになった。成功者と失敗者の実力は、技量の点でも才能の点
でも、大差はないようだ。しかし知能も技能も体力もすべて等しい二人の人間が、同時に
スタートを切ったとすれば、没頭できる人間のほうが先に到達する。また、たとえ実力は
二流であっても、物事に没頭できるタイプであれば、没頭できないタイプの一流の人間に
勝つことが、しばしばある。
                                     フレデリック・ウィリアムソン

愛してその人を得ることは最上である。愛してその人を失うことは、その次によい。
                                ウィリアム・メイクピース・サッカレー

不可能だと思わない限り、人間は決して敗北しない。
                                      デール・カーネギー