ストラウストラップのプログラミング入門(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に初期値を与えてみても、同じ結果になる。
要は、入力フォーマットエラーが正しく出ていないのではないかと思う。これがIDE(Microsoft Visual C++ 2010 Express)の設定の問題なのか、それとも何か誤解しているのかは、分からない。
分かったら追記する。
追記(2011/08/17)
プログラムの実行方法が間違っていた。
×・・・[デバッグ]→[デバッグ開始](F5)
○・・・実行ファイル(.exe)をコマンドプロンプトから実行
たとえば、「10 hoge」と入力したら、こんな出力を観測できた。
Hello, 10 (age -858993460)