带有不同参数的调用函数会产生相同的输出。 (C)

时间:2019-07-14 13:19:56

标签: c random

我正在尝试制作一个程序以生成2个随机数并将其打印到屏幕上。这是通过两次调用Numbers函数并将值分配给num1和num2,然后也使用这些变量两次调用PrintMsg来实现的,但是该函数将第一个值打印两次。

在调试器中,将num1和num2设置为2个不同的数字,并且已将模式变量成功传递给PrintMsg函数。

// C program to generate random numbers 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#include<time.h> 

int Numbers() {

    bool valid = false;
    int randNum;

    srand(time(0)); 

    while(valid != true) {

        randNum = rand() % 100;

        if (randNum > 0 && randNum <= 6) {
            valid = true;
        } 
    }

    return(randNum);
}

void PrintMsg(int x, int mode) {

    if (mode == 1) {

        switch(x) {

            case 1:
                printf(" %d ", x);
                break;

            case 2:
                printf(" %d ", x);
                break;

            case 3:
                printf(" %d ", x);
                break;

            case 4:
                printf(" %d ", x);
                break;

            case 5:
                printf(" %d ", x);
                break;

            case 6:
                printf(" %d ", x);
                break;
        }
    }

    else if (mode == 2){

        switch(x) {

            case 1:
                printf(" %d ", x);
                break;

            case 2:
                printf(" %d ", x);
                break;

            case 3:
                printf(" %d ", x);
                break;

            case 4:
                printf(" %d ", x);
                break;

            case 5:
                printf(" %d ", x);
                break;

            case 6:
                printf(" %d ", x);
                break;


        return;
    }
}

int main(void) 
{ 
    int num1;
    int num2;

    num1 = Numbers();

    PrintMsg(num1, 1);

    num2 = Numbers();

    PrintMsg(num2, 2);

    return 0; 
}

谢谢。

1 个答案:

答案 0 :(得分:2)

您正在使用srand()返回的当前时间,在每次对Numbers()的调用中使用time()重新填充随机数生成器。现在time()返回以秒为单位的时间,因此,如果您在同一秒内两次调用Numbers(),则将具有相同值的生成器作为种子,从而得到rand()返回的相同值。

您应该在程序开始时只调用一次srand(time(0))

正如乔·布莱克爵士在评论中指出的那样,当您在调试器中运行代码时,您可能在连续两次调用Number()之间等待了超过一秒钟,这就是为什么您没有看到这种行为的原因情况。