基本入出力


新しいヘッダ

基本的に、C++の中でC言語のプログラムを用いることができます
コンソール入出力についても、printf()やscanf()を使用することに問題はありません

骨格部分(制御や変数など)ではC++とCに大きな変化はありませんが
C++で大きく改善された部分の一つが入出力です
応用的な詳しい内容は、C++の本質を学習してから紹介します

C++のコンソール入出力ではstdio.hヘッダファイルを使いません
これに代わるのがiostreamです

さらに、C++では入出力に関数は用いず入出力演算子を用います
出力演算子は<<、入力演算子は>>です
これは、シフト演算子と同じですね。もちろんC++でもシフト演算子として用いることもできます
C++は、これらの演算子を入出力にも使用できるように拡張されています

stream << value;

streamには、出力先のストリームオブジェクトを、valueに出力する値を指定します
オブジェクトについては、後ほど詳しく説明します(嫌になるほど(^^
この場では どこに << 何を と覚えるべきでしょう
streamは出力する場所であり、C言語のファイル構造体のポインタのようなものに当たります

文字をコンソールに出力するには標準出力へのストリームを指定すれば良いのです
つまり、C言語のstdoutのようなものですね
これはiostreamで、coutというオブジェクトにあらかじめ定義されています
オブジェクトについては、まだ知らなくてもコンソール入出力をおこなうことに問題はありません
出力ストリームをcoutに指定すれば、指定した値をコンソールに出力します
#include <iostream>

int main() {
	std::cout << "Kitty on your lap";
	return 0;
}
coutの前にstd::という意味不明なものがついてますね
C++では他のモジュールとの名前の衝突を極力避けるため名前空間という機能があります
これはデータに住所を割り当てる機能で、上のプログラムではstd地区のcoutという感じです
郵便物が、住所と名前で構成されているのに似ているかもしれません
データをグローバルな位置に置くのを避け、局所化することで名前の競合を避けることができます

しかし、いちいち名前空間を指定するのは非常に面倒な作業です
とくに名前空間が長ったらしい名前の時は最悪です
そこで、特定の名前空間を可視状態にするため、次の構文を用います

using namespace space-name;

space-nameには名前空間を指定します
ここで指定された名前空間は、明示することなく扱うことができます
名前空間について詳しく語るには、この場ではあまりにも説明が足りません
この後、オブジェクト指向の概念を網羅してから再びこの話題を詳しく取り扱います
(現時点では知らなくても何の問題もありません)
#include <iostream>
using namespace std;

int main() {
	cout << "Kitty on your lap";
	return 0;
}
using namespace std; と指定することで、std名前空間を省略できます

古いコンパイラでは、この方法でコンパイルできない場合があります
名前空間は標準C++の新しい技術で、旧式のC++ではサポートされません
その場合はiostream.hを用います
#include <iostream.h>

int main() {
	cout << "Kitty on your lap";
	return 0;
}
しかし、この方法は標準C++では推奨されません
新しいC++ユーザーがこの方法を覚えることに何のメリットもないので
使っているコンパイラが標準C++をサポートしていない場合のみ、この方法を使用してください
昔はこのようにC++が記述されていたという程度で良いでしょう


コンソール入出力

出力演算子の基本的な使い方は上記したとおりです
ここでは、もう少し詳しく入出力ストリームについて取り上げます

出力に指定するデータ型は文字列である必要はありません
数値や浮動小数点型も、書式化して出力されます
また、一つの式で出力する値の数は任意です
次のように、複数の値を出力することが可能です
#include <iostream>
using namespace std;

int main() {
	cout << 10 << " : " << 1.15 << "\n";
	cout << "Kitty " << "on " << "your " << "lap";
	return 0;
}
それぞれの値が連結して出力されます

次に、標準入力からデータを入力してみましょう
標準入力はcinストリームオブジェクトが定義しています

cin >> value;

valueには、入力された値を格納する変数を指定します
ここでC言語と違うのはアドレスではなく変数を指定することです
C言語では、scanf()関数を用いたときに &value というように、アドレスを渡していましたね
しかし、C++の入力では変数のアドレスではなく変数そのものを指定します(アドレスを渡してはいけません)

変数の型、宣言についてはC言語と同じです
#include <iostream>
using namespace std;

int main() {
	char str[128];
	cout << "名前を入力してください>";
	cin >> str;
	cout << "ようこそ " << str << " さん";
	return 0;
}
C言語のscanf()関数同様に、改行すると入力が終了します
入力単位はタブやスペースごとに区切られるのもscanf()と同様です
つまり、Sakura Kinomoto と入力すると、Sakuraまでが入力されKinomotoはバッファに入ります
入力されなかった値がバッファに格納されるのも、scanf()同様の仕様ですね

入力ストリーム演算子も、一つの式に複数指定することができます
それぞれの入力はホワイトスペース単位に区切られます
#include <iostream>
using namespace std;

int main() {
	int i , j;
	cout << "二つの値を加算します>";
	cin >> i >> j;
	cout << i + j;
	return 0;
}
二つの整数をホワイトスペースで区切って入力してください



前のページへ戻る次のページへ