3章 入力ストリーム

http://www.geocities.jp/ky_webid/cpp/language/003.html

前回の出力ストリームに引き続き、今回は入力ストリームのお話です。

#include <iostream>

int main () {
    int num;
    
    std::cin >> num;
    std::cout << num;
    
    return 0;
}
$ main
123
123

うまく動いてますね。数値じゃなくて文字列を入力したらどうなるのでしょう?試してみます。

$ main
abcd
1

1と表示されました。

しかし不思議ですね。numはポインタで指定してないのに参照書き換え?が行われているようです。

Cの場合はこういう場合は&をつけてアドレスを渡してあげないと実現できなかったんですが、C++では&をつけなくてもアドレス渡しすることができるということでしょうか?

また二つ変数に同時に値を代入することもできるようです。

#include <iostream>

int main () {
    int num1,num2;
    
    std::cin >> num1 >> num2;  // 同じ値を2つの変数に格納
    std::cout << num1;
    std::cout << num2;
    
    return 0;
}
$ main
123
456
123456

と、思いきや実際に試してみたら入力待ちが二回になってそれぞれ別々の値を格納できました。

これは元記事の間違い?うーんちょっとわからないです。

またiomanipヘッダのstd::setw関数を利用することで入力文字数の制限も行うことができます。

#include <iostream>
#include <iomanip>

int main () {
    char str[81];
    
    std::cout << "80文字以内で入力せよ\n";
    std::cin >> std::setw(sizeof(str)) >> str;
    std::cout << str;
    
    return 0;
}

std::setw関数のようなストリームの動作方法を調整する機能のことを「マニピュレータ」というらしいです。

なんか凄そうな名前なので覚えておきましょう。