C++入門|C++の入力と出力

キーボードから気を受け取り、コンソールへ結果を放つ。cinとcoutを覚えれば、C++の入出力修行は一気に前進します。

C++の最初のプログラムでは、coutを使ってコンソールにメッセージを表示する方法を学びました。
ここからは、もう一歩進んで、キーボードから値を受け取り、その結果を表示する流れを見ていきます。

C++では、ただ文字を表示するだけでなく、ユーザーが入力した数値や文字列を受け取り、その内容を使って計算や判定ができます。
これができるようになると、プログラムは一気に「動きのあるもの」になっていきます。

ドラゴンボール風にたとえるなら、これまでは修行場の表示パネルにメッセージを映すだけでした。
ここからは、戦士が修行装置に数値を入力し、その結果をスカウター画面に表示するような世界に入っていきます。

C++で入力と出力を行うときに中心になるのが、次の2つです。

機能使うもの役割
入力cinキーボードから値を受け取る
出力coutコンソールへ値や文字列を表示する

この2つは、どちらもC++の標準名前空間 std に含まれている、入出力用のオブジェクトです。
さらに、これらはストリームという仕組みで動いています。

最初は記号が少し独特に見えるかもしれませんが、流れをイメージしながら見ると分かりやすいです。

  • cout << 変数 や 文字列
    → データを外へ送り出す
  • cin >> 変数
    → データを受け取る

この考え方が分かると、C++の入力と出力がとても読みやすくなります。

図:C++の入力と出力の全体像

この図が示していること

この図では、C++の入力と出力の基本的な流れを表しています。

左側で修行者が数値を入力し、その値が cin を通して変数に入ります。
そのあと、計算した結果を cout を使って右側のコンソール画面へ表示します。

つまり、入力 → 変数に保存 → 計算 → 出力という流れが、C++の基本的な入出力処理になります。
この流れが理解できると、今後のプログラムもかなり読みやすくなります。

まずはサンプルプログラムを見てみよう

それでは、C++でコンソールから整数を2つ入力し、その合計を表示するプログラムを見てみましょう。

ここでは、修行場にいる2人の戦士の戦闘力を入力し、合計戦闘力を表示するイメージで進めます。

プロジェクト/ファイル名: Chap2_02/main.cpp

#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    int power1, power2;

    // 2人の戦士の戦闘力をキーボードから入力する
    cout << "一人目の戦闘力=";
    cin >> power1;

    cout << "二人目の戦闘力=";
    cin >> power2;

    // 入力した2つの戦闘力の合計を表示する
    cout << "合計戦闘力=" << power1 + power2 << endl;

    return 0;
}

実行すると、たとえば次のようになります。

一人目の戦闘力=120
二人目の戦闘力=80
合計戦闘力=200

このプログラムでは、2つの整数をキーボードから入力し、その和をコンソールへ表示しています。

見た目はとてもシンプルですが、ここにはC++の入出力で大切な要素がたくさん入っています。

  • int型の変数を用意する
  • coutで入力を促すメッセージを表示する
  • cinでキーボード入力を受け取る
  • coutで計算結果を表示する
  • << や >> の向きを読み取る

このあと、それぞれの部分を順番に見ていきましょう。

変数を用意して入力を受け取る準備をする

プログラムの最初に、次のような行があります。

int power1, power2;

これは、整数を入れるための変数を2つ用意している部分です。

変数名意味
power1一人目の戦士の戦闘力int
power2二人目の戦士の戦闘力int

cinで入力した値は、どこかに保存しなければあとで使えません。
そのため、先に変数を用意しておきます。

ドラゴンボール風にたとえるなら、power1 と power2 は、修行装置から受け取った戦闘力を一時的に保管するためのスカウター用メモリのようなものです。

ユーザーが入力した値は、まずこの変数の中に入ります。
そして、そのあとで計算に使われます。

coutは入力前の案内メッセージにも使える

プログラムでは、入力の前に次のような表示をしています。

cout << "一人目の戦闘力=";

これは、ユーザーに「ここで値を入力してください」と知らせるためのメッセージです。

もしこの表示がなければ、実行したときに何を入力すればよいのか分かりにくくなってしまいます。

表示内容役割
一人目の戦闘力=最初の値の入力を促す
二人目の戦闘力=次の値の入力を促す

coutは、結果を表示するときだけでなく、入力を促すガイド表示にも使えます。
この使い方はとても重要です。

ドラゴンボール風にいえば、coutは修行者に向かって「最初の気の値を入れてください」「次の気の値を入れてください」と表示パネルで案内してくれる役目です。

cinはキーボードから値を受け取る

C++で入力を行う中心になるのが cin です。

サンプルでは、次のように書いています。

cin >> power1;

そして次も同じ形です。

cin >> power2;

cinの基本的な書式は、次の形です。

cin >> 変数名;

この書き方をすると、キーボードから入力された値が、その変数の中に代入されます。

記述意味
cin >> power1;入力された値を power1 に入れる
cin >> power2;入力された値を power2 に入れる

たとえば、最初の入力で 120 と入力して Enter を押した場合、power1 の中には 120 が入ります。
次に 80 と入力して Enter を押すと、power2 の中には 80 が入ります。

ドラゴンボール風にたとえるなら、cin は修行端末から戦士の気の数値を受け取る装置です。

>> の向きは、入力されたデータが変数の中へ流れ込む向きを表しているように見ると分かりやすいです。

図:cinで値を変数へ入れる流れ

この図が示していること

この図では、cin を使ってキーボードから入力された値が変数へ入る流れを表しています。

左側で入力された数値が、cin を通って power1 や power2 の箱へ入っていきます。
このように、cin は入力されたデータを受け取り、変数に渡す役目を持っています。

とくに >> の向きを見ると、データが右側の変数へ流れていくイメージがつかみやすくなります。

coutは計算結果を連続して表示できる

次に、計算結果を表示している部分を見てみましょう。

cout << "合計戦闘力=" << power1 + power2 << endl;

ここはC++らしい書き方がよく表れている部分です。

この1行では、次の3つを順番に出力しています。

  1. 文字列 合計戦闘力=
  2. power1 + power2 の計算結果
  3. 改行を表す endl

つまり、この1行は、次のような流れになっています。

順番出力するもの
1合計戦闘力=
2power1 + power2 の結果
3endl

たとえば、power1 が 120、power2 が 80 なら、power1 + power2 は 200 です。
そのため、表示結果はこうなります。

合計戦闘力=200

ここで大切なのは、cout では複数のデータを << でつないで連続して表示できる ことです。

cout << "文字列" << 変数 << endl;

この書き方に慣れると、printfのように %d を使わなくても自然に表示が書けるようになります。

printfとの違いも押さえておこう

C言語では、数値を表示するときによく printf を使いました。

たとえば、C言語なら次のような書き方になります。

printf("a+b=%d\n", a + b);

C++では、これに近い処理を次のように書けます。

cout << "合計戦闘力=" << power1 + power2 << endl;

この違いを表で見ると、かなり分かりやすくなります。

C言語C++
printf("a+b=%d\n", a + b);cout << "合計戦闘力=" << power1 + power2 << endl;

C言語の printf では、%d や \n などの書式指定を使うことが多くありました。
一方、C++の cout では、表示したいものを << で順番につないでいくため、書き方がやわらかく感じられることもあります。

もちろんC++でも \n を使えますが、cout を使うときは endl もよく使われます。

記述役割
%d整数値の書式指定
\n改行
endl改行
<<出力するデータをつなぐ

ドラゴンボール風にいえば、printf は決まった型で技を放つ感じです。
cout は、気のかたまりを順番に流し込んで、表示パネルへ自然に放っていく感じです。

cinとcoutはストリームを扱うオブジェクト

ここで、C++の入出力を理解するうえで大切なストリームの考え方を見ておきましょう。

cin や cout は、ただの入力命令や出力命令ではありません。
これらは、ストリームを扱うオブジェクトです。

ストリームという言葉には、流れという意味があります。
C++では、データを流れとして扱い、その流れに対して入れたり取り出したりするイメージで入出力を行います。

  • cout
    → データを外へ流していく
  • cin
    → データを内側へ受け取る

このイメージを持つと、記号の向きがとても分かりやすくなります。

記号イメージ
cout << データデータを外へ送り出す
cin >> 変数データを受け取って変数へ入れる

ドラゴンボール風にたとえるなら、ストリームは気の流れる通路のようなものです。
cout はその通路に向かってデータを送り、cin はその通路からデータを受け取ります。

ストリームの向きは不等号の向きで読むと分かりやすい

C++の入出力では、<< と >> の向きがとても重要です。

cout の場合

cout << "合計戦闘力=";

これは、文字列が cout 側へ送られて、最終的にコンソールへ表示されるイメージです。

cin の場合

cin >> power1;

これは、入力されたデータが cin から変数 power1 のほうへ流れ込むイメージです。

この向きを整理すると、次のようになります。

書き方意味
cout << データデータを出力する
cin >> 変数データを入力して変数へ入れる

最初は記号だけ見ると少し迷うかもしれませんが、矢印のように見るとかなり理解しやすくなります。

  • << は送る
  • >> は受け取る

という感覚で覚えるとよいです。

図3:ストリームの流れと cin・cout の向き

この図が示していること

この図では、C++の入出力がストリームという流れで考えられていることを表しています。

cout はデータをストリームへ送り出し、その先にあるコンソールやファイルへ届きます。
cin はストリームからデータを受け取り、変数へ渡します。

このように考えると、入出力の対象がコンソールでもファイルでも、考え方がかなり似ていることが分かります。
C++でストリームの考え方が大切にされている理由も、ここにあります。

実行の流れを順番に見てみよう

ここで、サンプルプログラムが実際にどのように動くのか、順番に整理してみましょう。

まず、プログラムが始まると main 関数の中の処理が上から順に実行されます。

int main(int argc, char** argv) {

次に、整数型の変数 power1 と power2 が用意されます。

int power1, power2;

そのあと、最初の案内メッセージが表示されます。

cout << "一人目の戦闘力=";

ユーザーが数値を入力して Enter を押すと、その値が power1 に入ります。

cin >> power1;

次も同じ流れです。

cout << "二人目の戦闘力=";
cin >> power2;

最後に、2つの値を足して結果を表示します。

cout << "合計戦闘力=" << power1 + power2 << endl;

流れを表にするとこうなります。

順番処理内容
1変数を宣言するpower1 と power2 を用意する
21つ目の案内を表示する一人目の戦闘力=
31つ目の値を入力するpower1 に入る
42つ目の案内を表示する二人目の戦闘力=
52つ目の値を入力するpower2 に入る
6合計を表示するpower1 + power2 の結果を出す
7プログラムを終了するreturn 0;

このように、C++の入力と出力は、順番に見ていくととても素直です。

C++の入力と出力で気をつけたいポイント

C++の cin と cout を使うときは、いくつか意識しておきたいポイントがあります。

入力する変数の型に合った値を入れる

今回の変数は int 型なので、整数を入力する前提です。
整数以外を入れると、期待どおりに動かないことがあります。

変数の型入力する値の例
int10、25、100
double3.14、0.5、12.8
string名前や文章

入力の前に案内を出す

入力だけを待つ状態にすると、ユーザーは何を入れればよいか迷いやすいです。
そのため、cout で入力前のメッセージを表示するのが親切です。

出力は << でつなげられる

C++では、文字列、変数、計算結果、endl を連続して << でつなげることができます。
この書き方は今後も何度も使います。

C++の入力と出力で身につけたい感覚

今回の学習で大切なのは、文法をただ暗記することではなく、データがどこから来てどこへ行くのかをつかむことです。

  • キーボードから値が入る
  • cin がそれを受け取る
  • 変数に保存する
  • 必要なら計算する
  • cout が結果を表示する

この流れをイメージできれば、入力と出力のコードはかなり読みやすくなります。

ドラゴンボール風にいえば、修行者が修行端末へ気の値を入力し、その値が内部のメモリに保存され、最後に表示パネルへ結果が映し出される、という流れです。

C++の入力と出力で覚えておきたい要点

最後に、この内容で押さえておきたいポイントを整理しておきます。

項目内容
cinキーボードから値を受け取る
coutコンソールへ値や文字列を表示する
>>入力された値を変数へ入れる
<<データを出力側へ送る
endl改行する
ストリームデータの流れとして入出力を考える仕組み

C++の入出力は、これから先の学習でも何度も登場します。
変数、計算、条件分岐、繰り返し、配列、関数など、ほとんどのテーマで cin と cout は活躍します。

まずは、cin で受け取り、cout で表示するという基本の流れをしっかり身につけておきましょう。
この感覚がつかめると、C++のプログラムがぐっと身近に感じられるようになります。