1

可能重复:
每次循环迭代都使用相同的随机数

这是我的代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int attack() {
    srand((unsigned)time(NULL));
    int hits=0;
    for (int i=0;i<=3;i++) {
        int a = rand() % 6;
        if (a==6 || a==5)
        {
         hits++;   
        }
    }
    return hits;
}

int main () {
    int a=attack();
    cout << a << endl;
    int b=attack();
        cout << b << endl;
    int c=attack();
        cout << c << endl;
    int d=attack();
        cout << d << endl;
    int e=attack();
        cout << e << endl;
    int f=attack();
        cout << f << endl;
    int g=attack();
        cout << g << endl;
    int h=attack();
        cout << h << endl;
}

为什么我的所有变量都在main()同一个数字中?

我只得到这样的输出:

1
1
1
1
1
1
1
1
4

1 回答 1

3

srand()应该在程序开始时调用一次(好吧,在你开始调用之前的某个时刻rand())。

通过每次输入函数时调用它(快速连续),您将种子值重置为相同的值,这就是您看到重复数字的原因。

请注意,如果在您的程序运行时时间点击到新的一秒,您可能偶尔会得到不同的数字,但这不太可能,因为该特定程序应该在不到一秒的时间内完成。

在第一次调用之前将调用srand()移动到。main()attack()

于 2012-11-13T04:02:42.383 回答