c - 当我播种数字时,兰德仍然无法工作

标签 c random

注意,下面的代码并没有完全写出来,我已经制作了一副牌并洗了牌

我不明白为什么我没有得到两个随机数,我尝试播种这些数字,但它似乎无法正常工作。 我想要的是每次打印出脸部/西装时,它应该是两种不同的数字/颜色。我的错误在哪里?

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

struct card{
    const int *face; 
    const char *suit; 
};
typedef struct card Card;

void dealing(const Card * const wDeck);
void shuffle(Card * const wDeck);

int main(){
    srand(time(NULL));
    shuffle(deck);
    dealing(deck);
    return(0);
}

void dealing(Card * const wDeck)
{
    int j;
    j = rand() % 52;
    srand(time(NULL));

    printf("%d of %s\n", wDeck[j].face, wDeck[j].suit);
    printf("%d of %s\n", wDeck[j].face, wDeck[j].suit);
} 
void shuffle(Card * const wDeck)
{
    int i;     
    int j;    
    Card temp; 

    for (i = 0; i <= 51; i++) {
        j = rand() % 52;
        temp = wDeck[i];
        wDeck[i] = wDeck[j];
        wDeck[j] = temp;
    } 
} 

最佳答案

dealing() 中删除对 srand() 的调用。每次程序调用(在 main() 中)调用一次 srand() 就足够了。

    void dealing(Card * const wDeck)
    {
        int j;
        j = rand() % 52;
        // srand(time(NULL)); /* no, no, no.
                              /* The PRNG has already been
                              /* seeded inside main() */

        printf("%d of %s\n", wDeck[j].face, wDeck[j].suit);
        printf("%d of %s\n", wDeck[j].face, wDeck[j].suit);
    } 

关于c - 当我播种数字时,兰德仍然无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418166/

相关文章:

r - 如何在 R 中获取当前种子

c - 如何将打印到 LOGFILE 的值存储在数组中

c++ - 了解 boost::random statistic-tests 的结果

c - Axis2 加载 DLL 失败

c - 使用函数进行矩阵乘法的警告

c - 显示随机数数组的问题

php - 生成具有预定义长度的随机数 PHP

java - 如何随机生成 75 - 100% 之间的数字?

应用 CUDA 内核后数据损坏

C 对链表进行冒泡排序