- ベストアンサー
if文が機能しません
初歩的な質問でお恥ずかしいのですが、簡単なif文が、機能してくれません。 良かったら、アドバイスよろしくおねがいします 以下がソースとなります。 double x, a; x=(int) (rand() / (RAND_MAX+1.0) * 100); if (0 <= x < 50) { a=1; } else { a=2; } これなんですが、結果が全てa=1となってしまい、分岐してくれません。 なぜでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C&C++ のカテゴリーだから, 使ってる言語は C か C++ だと思うし, この乱数の作り方なら % ではなく / で正解>#1. if の条件がおかしいです. 「0 <= x」の返す値は 0 か 1 です.
その他の回答 (2)
- arain
- ベストアンサー率27% (292/1049)
演算子の優先順位展開すると「<=」と「<」は同列なので左から優先的に処理すると考えると >if (0 <= x < 50) は if ((0 <= x) < 50) になるので、(0 <= x)はxが「0以上なら 真(0以外。ここでは1とする)」「0以下なら偽(0)」なので 「if(1 < 50)」または「if(0 < 50)」なので「a=1」は正しいです。 仮に if (0 <= (x < 50))であっても、真が正の値をとる限り一緒です。
- BDTF
- ベストアンサー率55% (38/68)
どの言語を使ってるかわからないので何とも言えないんですが気づいたことだけ…… ・ランダムな値の出し方は「/」でいいんですか? 「%」じゃなくて? ・if内部の条件式は複数くっつけて書かないようにしましょう if (0 <= x < 50) → if(0<=x && x<50)
お礼
早速のご回答ありがとうございます。 失礼しました。言語はCです。 ランダムの関数は参考書のものを使用しているので”/”であっているはずです。 if文の書き方気をつけます。
お礼
ありがとうございます おっしゃる通り、ifの条件式の書き方間違えてました。 #1さんのように&&でやらなければいけなかったのですね。 初歩的なミスでお恥ずかしいです。