虽然永远不会以随机数结尾

Fab*_*gue 1 c random while-loop

我试图得到一个随机数,并且如果它超过另一个数字则具有while结尾:

int main() // random
{
    int x= 50;
    int i;

    while (i>x){
        srand(time(0));
        int i = rand() %100;
        printf("laenge %d", i);
    }
}
Run Code Online (Sandbox Code Playgroud)

同时开始很好并产生不同的数字(如1.000倍11,1.000倍75 ......)但它永远不会结束.

我有2个问题,为什么不结束?为什么它会在控制台中获得相同随机数的1.000倍,然后是下一个随机数的1.000倍?

如果我添加:

int main() // random
{
    int x= 50;
    int i;

    while (i>x){
        srand(time(0));
        int i = rand() %100;
        printf("laenge %d", i);
        sleep(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

睡眠(1); 整个代码不再起作用了.

Sha*_*our 6

你重新宣布i:

int i = rand() %100;
^^^
Run Code Online (Sandbox Code Playgroud)

所以它i与用于检查while循环的用户不同:

while (i>x){
Run Code Online (Sandbox Code Playgroud)

这也意味着您需要i在第一个声明中初始化,因为使用未初始化的变量是未定义的行为.

你只应该拨打srand一次,所以把它移到循环之外.另外,最好阅读如何在一定范围内获得随机整数?来自C FAQ.在该范围内生成随机整数的推荐公式为[M, N]:

M + rand() / (RAND_MAX / (N - M + 1) + 1)
Run Code Online (Sandbox Code Playgroud)

在你的情况下将是:

rand() / (RAND_MAX / (100 + 1) + 1)
Run Code Online (Sandbox Code Playgroud)