「標準入力」というのは、慣用的な入力を行うためのテキストストリームの結合先のことで、多くの場合、キーボードからの入力になっています。標準出力の場合もそうでしたが、キーボードからの入力といっても、よくあるウィンドウ上でのキー操作ではなく、コマンドライン上での入力です。
そして、プログラムの呼び出し方しだいで、標準入力は、キーボードからの入力ではなく、ファイルや他のプログラムが操作するストリームに結合することもできます。CGIでは標準入力はPOSTされたデータになりますし、別の環境ではシリアルポートに結合されることもあるでしょう。
std::cin
標準入力から読み込むための最も一般的な方法は、std::cin を使用することです。std::cin に対して >> 演算子を用いることで、
0 1 2 3 4 5 6 7 8 |
#include <iostream> int main() { char s[100]; std::cin >> s; } |
とすれば、標準入力から読み込んだ値を>>演算子の右辺に記述したオブジェクトに格納します。上のサンプルコードでも分かるように、std::cinを使うときは ヘッダをインクルードする必要があります。また、値を格納するオブジェクト(上のサンプルではs)の型に応じて、標準入力から読み込んだ文字列を適切に変換します。
例えば、右辺のオブジェクトがint型であれば整数値として、double型であれば浮動小数点値として読み込むことになります。そのほか、std::stringなど、標準ライブラリの主要なクラスのオブジェクトもそのまま右辺に指定することができます。上のサンプルでは、標準入力から100文字以上読み込んだ場合にはバッファがあふれてしまうため、決して安全とはいえません。文字列を読み込むときは、原則としてstd::string型のオブジェクトに読み込むようにしたほうがよいでしょう。
std::wcin
標準出力の場合、std::coutに対してワイド文字版のstd::wcoutがあったように、std::cinに対してもワイド文字版のstd::wcinがあります。注意点の多くはstd::wcoutと同じですので、そちらを参照してください。
stdin
stdinはstdoutと同様、C言語との互換性のために用意されたものです。stdinを用いて標準入力から文字列を読み込むには、
0 1 2 3 4 5 6 7 8 |
#include <cstdio> int main() { char s[100]; std::fgets(s, 100, stdout); } |
のようになります。ただし、これは純粋に文字列を読み込む関数ではなく、標準入力から1行を読み込むための方法ですので、最後に改行文字’\n’が格納されます。もろもろの注意点は、こちらのページで詳しく解説していますので、参照してみてください。