• ベストアンサー

0~4以外の際のif文

0~4以外のif文を作りたいのですが ↓のif文を色々変化させたのですが、4より大きくなおかつ0より小さいという結果が出ませんでした。 どこか間違ってるのだと思うのですが・・・ a<0で0ではないことはコンパイルして0ではないことは判明しました。 a<5もやってみましたが・・・。 int a; scanf("%d",&a); if(a < 5 && a < 0){ 4 より大きい & 0より小さい else 0~4以外 関数などは使いません。よろしくお願いします

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

  • ベストアンサー
回答No.2

> 4より大きくなおかつ0より小さい 「なおかつ」は「両方の条件を満たす」です。 ・4より大きい ・0より小さい を両方満たす値は,0が4より小さいために存在しません。 > 0~4以外 は, 「『0以上かつ4以下』ではない」ですから,ド・モルガンの法則により, 「『0以上ではない』または『4以下ではない』」となり, 「0未満または4より大きい」となります。 これらをそのままコードに落とすと,それぞれ !(0 <= a && a <= 4) !(0 <= a) || !(a <= 4) a < 0 || 4 < a のようになります。

izupawapuro
質問者

お礼

>a < 0 || 4 < a やはり&&であらわすとなるとできないですよね 4 < aというのがやっていいやり方なのかわからないのですが a < 0 || a > 4 でも同じ動作ができたのでよかったです ご回答ありがとうございます!

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

a < 5 を「4 より大きい」と思っているのが思った結果にならない理由です。 ……というか、「4 より大きい & 0より小さい」と「0~4以外」って言ってること同じですよね? どちらかをもう一方とは反対のことを言うように変えてください。そうしないとif文の括弧の中をどう直せばいいかアドバイスできません。

izupawapuro
質問者

補足

ああ、見直したら確かにそうでした・・・ごめんなさい 4より大きい & 0より小さい は 0~4だったら ですね。 プラスに補足しておくと その際にcnt+1する感じかもしれないです elseのとこは 0~4以外です

関連するQ&A