0

重複の可能性:
範囲内の乱数を生成しますか?

コードが実行されたときに、コマンド プロンプトに最大数を入力して最大数を再定義し、0 と新しい最大数の間に新しい乱数を生成できるようにしようとしています。

私はこれを正しく行いましたか?

#include <stdlib.h>
#include <stdio.h>
#include <time.h>


int main()
{
    int randomnumber ;
    int max;
    srand( time(NULL) );
    scanf("Enter total number of students %d",&max);
    randomnumber=rand()% 30;
    printf("This is your random number\n %d",randomnumber);
    getchar();
    return 0;
}
4

1 に答える 1

1

scanfユーザーにメッセージを送信するために を使用しましたが、そのためには を使用する必要がありますprintf。試す:

printf("%s", "Enter total number of students: ");
scanf("%d",&max);

次に、 を に変更して、ユーザーに 0 から までの数値を与えることが%30でき%maxますmax - 1

randomnumber=rand()% max;

コメンテーターが言ったように、モジュロを使用して範囲を縮小してrand()も、適切なランダム分布は得られません。また、max が 0 より大きいことを確認してください。そうしないと、エラーが発生します。

max現時点で大量の値を取得している理由が気になる場合は、max明示的に初期化していないためです。C および C++ では、これはジャンク データが存在する可能性があることを意味します。intanが自動的に 0 に初期化されるJava や C# とは異なります。

于 2013-01-16T07:55:30.853 に答える