キーボードからの入力

キーボードからの入力

前回は、画面に1行を表示するプログラムについて解説しました。今回は、反対にキーボードから入力するプログラムについて解説します。入力と出力ができるようになれば、プログラムの実行中に、いろいろと指示を送って、それに反応させるための第一歩となるわけです。今回は、あまり難しいことからはじめても分からなくなるので、入力された文字列を単にオウム返しするだけのプログラムを作ってみましょう。

まずは、何はともあれ、ソースコードを入力してみましょう。

#include <iostream>
#include <string>

int main()
{
  std::string str;
  std::cin >> str;
  std::cout << str << std::endl;
  return 0;
}

<iostream> や std::cout の行については、前回説明したとおりです。今回のキモとなるのは、std::string と、std::cin です。まずは、順番に std::string から解説していくことにします。

std::string というのは、std:: が付いていることからもお分かりのように、標準C++ライブラリが提供する機能の一つです。英語の string というのは、「ひも」の意味ですが、プログラミング言語では、普通、「文字列」のことを表します。ですから、std::string というのは文字列のことです。これは、前から登場している int (整数)と同じ仲間で、「型」と呼ばれます。「型」については、後ほど詳しく説明しますが、どんな種類のデータなのか(整数なのか、実数なのか、文字列なのか、もっと別の種類なのか)を区別するものだと考えておいてください。

そして、std::string が現れる行では、std::string の直後に str というのがありますね。これは、std::string 型のデータを格納する器のようなものです。こうした器のことを「変数」といいます。もっと正確にいうと、「オブジェクト」といいます。C++では、「変数」と「オブジェクト」は同じものだと考えてください。「変数」の方が、数学でも出てくるのでなじみやすいかもしれませんが、中には、値を変更できないものもあるので、変更できないものを「変数」と呼ぶのはおかしいということで、「オブジェクト」といっているだけです。そんなに深い意味はありません。

この行は結局のところ、str という名前の std::string 型の「オブジェクト」を準備しているわけです。このような準備のことを「宣言」といいます。C++では、「宣言」も「文」の一種ですので、最後には必ずセミコロン( ; )が必要です。「オブジェクト」は、このように「宣言」を行わないと使用することはできません。なお、「オブジェクト」の名前に使えるのは、関数名と同じで、英字の大文字・小文字と数字、そして下線だけです。また、名前の先頭に数字は使えません。下線で始まる名前を使うべきではないのも、関数名の場合と同じです。

std::string 型を使うには、std::cout を使うのに<iostream>ヘッダが必要だったように、<string>ヘッダが必要になります。ですから、2行目で<string>ヘッダを #include で取り込んでいます。今回はたまたま、<iostream>を1行目で、<string>を2行目で取り込みましたが、順序はどちらが先でも後でもかまいません。

次に、std::cin ですが、名前からも分かるように、std::cout が「標準出力」だったので、std::cin は「標準入力」です。「標準入力」というのは、「標準出力」の反対で、場合によってはファイルなどに入力元を切り替えることもできますが、普通はキーボードに割り付けられています。ですから、キーボードから打ち込んだ文字列が、「標準入力」としてプログラムに読み込まれるわけです。

そして、<< とは反対向きの >> という記号がありますね。これも、<< と同じく演算子の一種ですが、見ての通り、<< が出力するための演算であったのに対し、反対向きの >> は入力するための演算子です。ですから、std::cin >> str; というのは、std::cin が表す「標準入力」からデータを入力して、その内容を str に格納しています。ここでも文の終わりにセミコロン( ; )が付いていることを改めて思い出してください。

str に格納されたデータ、すなわち文字列は、std::cout に対して出力することで画面に表示されます。これで、オウム返しのプログラムができたわけです。それでは、実際に動かして確認してみましょう。コンパイルと実行は、いままで通りです。プログラムを実行してから、キーボードで abcd と入力して、Enter を押してみてください。

abcd
abcd

上のように、同じ内容が下の行に表示されましたか?他にもいろいろ入力して、オウム返しされるか試してみてください。ところで、入力する文字列の途中に、空白(スペース)を入れてしまうと、そこで入力される文字列が切れてしまいます。次のような感じです。

abcd efg
abcd

>> 演算子で、std::string 型のオブジェクトに入力する場合は、途中に空白やタブや改行があると、そこで切れてしまいます。これはバグとかではなく、そういう仕様です。ですから、必要に応じて、適切な入力方法を自分で選んでやる必要があるわけです。ここでは、それ以上の詳しいことには触れません。

プログラムの行数も少しずつ増えてきましたが、関数の中に、いくつかの文を書いた場合、原則として書いた順番に実行されます。今回の場合、

  • 最初に str が宣言されて
  • 標準入力から str に文字列が入力されて
  • 標準出力に str の内容が出力されて
  • return で main 関数が終了した

わけです。関数の枠組みを超えては、こんな風に書いた順番に実行されるわけではありませんが、関数の中に限れば、至って単純です。





サイト名: takagi.in   http://takagi.in
この記事のURL:   http://takagi.in/modules/cpp_guide5/index.php?id=7