srand函数返回相同的值

时间:2013-01-24 05:08:02

标签: c coding-style srand

嘿伙计们看看这个节目。

/* The craps game, KN king page 218 */

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

int roll_dice(void);
bool play_game(void);

int roll_dice(void)
{
    int roll;

    getchar();
    srand((unsigned) time(NULL));

    roll = rand() % 13;

    if(roll == 0)
    roll = roll + 1;

    return roll;
}

bool play_game()
{
    int sum = 0, wins = 0, loss = 0, point;

    sum = roll_dice();

    printf("You rolled: %d", sum);

    if(sum == 7 || sum == 11)
    {
        printf("\nYou won!\n");
        return true;
    }

    if(sum == 2 || sum == 3 || sum == 12)
    {
        printf("\nYou lost!!");
        return false;
    }

    point = sum;

    printf("\n\nYour point is: %d", point);

    do
    {
        sum = roll_dice();
        printf("\nYou rolled: %d", sum);

    }while(sum != point);

    if(sum == point)
    {
        printf("\nYou won!!!");
        return true;
    }

}

int main()
{
    char c, wins = 0, losses = 0;
    bool check;

    do
    {
        check = play_game();

        if(check == true)
          wins++;

        else if(check == false)
          losses++;

        printf("\nPlay Again? ");
        scanf("%c", &c);

    }while(c == 'Y' || c == 'y');

    printf("\nWins: %d      Losses: %d", wins, losses);

    return 0;
}

srand函数保持返回,相同值3或4次,y是那个?

每次掷骰子时我想要不同的值,复制代码并运行它以查看我的意思

1 个答案:

答案 0 :(得分:8)

srand()是一个为rand()函数设置种子的函数。你在这里做的是将种子设置为你调用的每个rand()之前的当前时间,如果调用得足够快,它将获得相同的值(因为它将重置为相同的种子,如果足够快将会是同时价值)。

你想要做的是在程序启动时(在main()函数的开头)调用srand()一次

然后每当你想要一个随机数时调用rand(),就像你现在正在做的那样,但每次都不调用srand()。