- ベストアンサー
debug版とrelease版で結果が違う
現在c言語の勉強でシーザー暗号のプログラムを作っているんですが、鍵番号を入力するところで while(1){ printf("1から25までの鍵番号を入力して下さい : "); scanf("%d", &key); while((getchar()) != '\n') ; if(0 < key && key < 26){ return key; }else{ fprintf(stderr, "\a数字が正しくありません。\n"); } debug版では数字以外を入力されたらエラーが出るんですが、 release版ではそのまま進んでしまいます。これはどうしてでしょうか? 環境は win xp sp3 vc++2008EEです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たとえば, 「scanf の前でたまたま key の値が範囲内」だったとしたら, エラーが出なくても不思議じゃない. つまり, これでは正しくないということ. デバッグ版だと実際に書いてあるプログラムのほかにもいろいろとやっているので, デバッグ版とリリース版では動作が違う可能性があります.
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
回答No.2
VisualC++のdebug版だと変数の初期化をしなくても自動的に0xCCで初期化されます release版では宣言された変数の値は不定なのでたまたま1-25の範囲だったのでしょう key = 0; のように1-25以外の値で初期化しましょう
質問者
お礼
ありがとうございます。デバッグ版とリリース版の違いを考えて作っていきたいと思います。ありがとうございました。
お礼
回答ありがとうございます。デバッグ版とリリース版では動作が違うことがあるのは知ってましたがこういうことなんですね。