10秒目をつむったら…

現在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です。

A 回答 (2件)

たとえば, 「scanf の前でたまたま key の値が範囲内」だったとしたら, エラーが出なくても不思議じゃない. つまり, これでは正しくないということ.


デバッグ版だと実際に書いてあるプログラムのほかにもいろいろとやっているので, デバッグ版とリリース版では動作が違う可能性があります.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。デバッグ版とリリース版では動作が違うことがあるのは知ってましたがこういうことなんですね。

お礼日時:2009/11/18 18:42

VisualC++のdebug版だと変数の初期化をしなくても自動的に0xCCで初期化されます


release版では宣言された変数の値は不定なのでたまたま1-25の範囲だったのでしょう
key = 0;
のように1-25以外の値で初期化しましょう
    • good
    • 0
この回答へのお礼

ありがとうございます。デバッグ版とリリース版の違いを考えて作っていきたいと思います。ありがとうございました。

お礼日時:2009/11/18 18:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!