• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

たとえば, 「scanf の前でたまたま key の値が範囲内」だったとしたら, エラーが出なくても不思議じゃない. つまり, これでは正しくないということ. デバッグ版だと実際に書いてあるプログラムのほかにもいろいろとやっているので, デバッグ版とリリース版では動作が違う可能性があります.

rei_konagi
質問者

お礼

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

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

VisualC++のdebug版だと変数の初期化をしなくても自動的に0xCCで初期化されます release版では宣言された変数の値は不定なのでたまたま1-25の範囲だったのでしょう key = 0; のように1-25以外の値で初期化しましょう

rei_konagi
質問者

お礼

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