-3

これは私の機能です:

Random(int min, int max)
{
    srand(time(NULL));
    return (rand() % (max-min)) + 1;
    // or
    return (rand() % (max+min)) + 1;
    // or
    return (rand() % (max-min))
    // or
    return (rand() % (max+min))
};

そして、それは機能していません。Random(5、10)を追加すると、15、5、4が表示されることがあります。すべてのガイドが「これが想定されている方法です」と言っているので、理解できません。動作しません。私は何を逃しましたか?

この方法はクラスの一部です。

srand(time(NULL))を次の場所に配置してみました:

  1. 全くない
  2. コンストラクター内
  3. 方法で

結果がありません。

rand()は0から1の間の値を返すべきではありませんか?私のはしません。

4

2 に答える 2

7
  1. srand一度だけ電話する
  2. 使用return (rand() % (max-min+1)) + min; (+1はmax範囲に含めるためのものです)
  3. rand()0からの値を返し、RAND_MAXは正の整数です。
于 2012-06-22T10:20:11.017 に答える
3

マンランド(3)

関数のシグネチャは次のとおりですint rand(void);。したがって、整数であるため、0から1の間の値を返すことはできません。

戻り値: rand()およびrand_r()関数は、0からRAND_MAX(両端を含む)までの値を返します。srand()関数は値を返しません。

マンランドから(3)

于 2012-06-22T10:20:59.700 に答える