• ベストアンサー

if文が機能しません

初歩的な質問でお恥ずかしいのですが、簡単なif文が、機能してくれません。 良かったら、アドバイスよろしくおねがいします 以下がソースとなります。 double x, a; x=(int) (rand() / (RAND_MAX+1.0) * 100); if (0 <= x < 50) {        a=1; } else {        a=2; } これなんですが、結果が全てa=1となってしまい、分岐してくれません。 なぜでしょうか?

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

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

C&C++ のカテゴリーだから, 使ってる言語は C か C++ だと思うし, この乱数の作り方なら % ではなく / で正解>#1. if の条件がおかしいです. 「0 <= x」の返す値は 0 か 1 です.

kikaisuga
質問者

お礼

ありがとうございます おっしゃる通り、ifの条件式の書き方間違えてました。 #1さんのように&&でやらなければいけなかったのですね。 初歩的なミスでお恥ずかしいです。

その他の回答 (2)

  • arain
  • ベストアンサー率27% (292/1049)
回答No.3

演算子の優先順位展開すると「<=」と「<」は同列なので左から優先的に処理すると考えると >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)
回答No.1

どの言語を使ってるかわからないので何とも言えないんですが気づいたことだけ…… ・ランダムな値の出し方は「/」でいいんですか? 「%」じゃなくて? ・if内部の条件式は複数くっつけて書かないようにしましょう  if (0 <= x < 50) → if(0<=x && x<50)

kikaisuga
質問者

お礼

早速のご回答ありがとうございます。 失礼しました。言語はCです。 ランダムの関数は参考書のものを使用しているので”/”であっているはずです。 if文の書き方気をつけます。