ストラウストラップのプログラミング入門(2) 第3章

暑くてやる気が起きないので、『ストラウストラップのプログラミング入門』をだらだら読んでいる。第3章の3.4まで。

一章分は一気に読み通すべしと書いてあった気がするけれども、無理はしない。

分からないことがあるのでメモをする。

といっても、言語の話ではなく、実行環境の挙動の話。そして、またしても、メモリに残ったゴミの見え方の話。

定義した変数と異なる型の値をcinで読み込もうとすると、読み込みに失敗して、メモリに元々あった値が見えるらしい。

ということは、こんな感じの関数がある場合、

int main()
{
	string name;
	int age;
	
	cin >> name;
	cin >> age;
	
	cout << "name :" << name << ", age :" << age << '\n';
	
	return 0;
}

実行して「20 hoge」と入力すると、int型の変数ageに値「hoge」は入らず、出力される値は不定の数字になるのが正しい挙動だと思う。

しかし、実際に実行してみると、そんなものは見えずにプログラムは終了する。その際のコンソールのデバッグ出力は、成功時と大差ない(つまり、何が起きているのかよくわからない)。

さらに、ageに初期値を与えてみても、同じ結果になる。

要は、入力フォーマットエラーが正しく出ていないのではないかと思う。これがIDEMicrosoft Visual C++ 2010 Express)の設定の問題なのか、それとも何か誤解しているのかは、分からない。

分かったら追記する。

追記(2011/08/17)

プログラムの実行方法が間違っていた。

×・・・[デバッグ]→[デバッグ開始](F5)
○・・・実行ファイル(.exe)をコマンドプロンプトから実行

たとえば、「10 hoge」と入力したら、こんな出力を観測できた。

Hello, 10 (age -858993460)