- ベストアンサー
初歩なんですけど。。
c machine を使ってやると下のやつが全部奇数になってしまいます。 学校のコマンドプロンプトのときは出来た気がするんですが、、 #include<stdio.h> void main(){ int a; printf("Input the Number please"); scanf(%d,&a); if(x%2==1){printf("奇数");} else{printf("偶数");} } どこかこのソースの間違いや、他の原因などあればお願いします。
- みんなの回答 (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)
#1さんが書かれたとおり、提示されたソースは コンパイル時にエラーが出ます。実行できません。 >全部奇数になってしまいます。 こうなるということは、コンパイルが通って実行できたソースをお持ちなわけですね。 それをコピー&ペーストして提示してください。
- wildcat-yp
- ベストアンサー率37% (303/813)
これはコンパイルエラーになりませんか? scanfの中の%dは""で囲む必要があるはずですし、ifのなかはxではなくaではありませんか? それ以外はとくに間違ってなさそうです。