Rand()在C中不是唯一的

时间:2018-11-13 22:32:39

标签: c random

我正在使用rand()函数生成随机巧克力。即使我已经花了时间,但rand()总是给我相同的数字,我不确定如何解决这个问题?

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


int main() {
    /* Seed the random number generator */
    srand48(time(0));
    double t=rand()%5;
    printf("Your selected chocolate will be: \n");
    if(t==0){
        printf("Caramel\n");
    }
    else if(t==1){
        printf("Milk\n");
    }
    else if(t==2){
        printf("Sweet\n");
    }
    else if(t==3){
        printf("Semi-sweet\n");
    }
    else {
        printf("Dark\n");
    }

    return EXIT_SUCCESS;
}

谢谢!

1 个答案:

答案 0 :(得分:5)

正如其他人在评论中指出的那样,函数srand48不会植入rand;它植入lrand48和相关功能。来自man page

  

srand48(),seed48()和lcong48()函数是初始化函数,应在使用drand48(),lrand48()或mrand48()之前调用其中之一。函数erand48(),nrand48()和jrand48()不需要首先调用初始化函数。

您需要使用参数time(0)调用srand,以将rand函数植入当前系统时间。

此外,为什么还要使用类型double来存储从rand返回的值?使用足以在系统上包含RAND_MAX的整数类型;通常为shortint