• ベストアンサー

初歩なんですけど。。

c machine を使ってやると下のやつが全部奇数になってしまいます。 学校のコマンドプロンプトのときは出来た気がするんですが、、 #include<stdio.h> void main(){ int a; printf("Input the Number please"); scanf(%d,&a); if(x%2==1){printf("奇数");} else{printf("偶数");} } どこかこのソースの間違いや、他の原因などあればお願いします。

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

  • ベストアンサー
  • stakezo
  • ベストアンサー率40% (2/5)
回答No.3

まず、この2箇所が間違っています。修正してください。 × scanf(%d,&a); ○ scanf("%d",&a); × if(x%2==1){printf("奇数");} ○ if(a%2==1){printf("奇数");} そして、回答者さんの現象ですが、考察するに、おそらく修正の2番目 にある、変数xが定義されていなかった為でしょう。 少し詳しく書きますが、 #include<stdio.h> void main(){ int a; int x; printf("Input the Number please"); scanf("%d",&a); if(x%2==1){printf("奇数");} else{printf("偶数");} } こうだったと考えた場合、コンパイルエラーには成りませんが、scanf で入力している変数はaです。しかし、IF文で参照している値はxなの で、おかしな事になりますね。xは何が入っているのでしょう? 実は、xは定義された時点では"ゴミ"が入っています。0とか綺麗な値じゃなくて、35363とか3445とか6435とか38292とかわけの分からない値が 入ってるのです。 そして、ここからはコンパイラーによって違うかもですが、偶然(※)毎 回同じゴミが定義されていて、 1回目 int x; xに1255というゴミが入った! 2回目 int x; xに1255というゴミが入った! ・・・ となった場合、if文の結果は絶対に奇数ですよね。 ーーーーーーー こういった、プログラマーの意図しない動きを「論理エラー」といいます。コンパイルはちゃんと通ってるのにね(笑)

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

#1さんが書かれたとおり、提示されたソースは コンパイル時にエラーが出ます。実行できません。 >全部奇数になってしまいます。 こうなるということは、コンパイルが通って実行できたソースをお持ちなわけですね。 それをコピー&ペーストして提示してください。

回答No.1

これはコンパイルエラーになりませんか? scanfの中の%dは""で囲む必要があるはずですし、ifのなかはxではなくaではありませんか? それ以外はとくに間違ってなさそうです。

関連するQ&A

専門家に質問してみよう