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是那个?

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

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

当程序启动时(main()函数的开始),你要做的就是调用srand()

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