Возможный дубликат:
Одинаковые случайные числа при каждой итерации цикла
Вот мой код:
#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
srand()
должен быть назван один раз в начале программы (ну, в какой-то момент, прежде чем начать звонить rand()
тем не мение).
Вызывая его каждый раз, когда вы входите в функцию (в быстрой последовательности), вы сбрасываете начальное значение на одно и то же, именно поэтому вы видите повторяющиеся числа.
Обратите внимание, что вы может иногда получайте другое число, если время переходит на новую секунду во время работы вашей программы, но маловероятно, так как эта конкретная программа должна завершиться гораздо быстрее, чем за одну секунду.
Переместить srand()
позвонить main()
до первого звонка attack()
,
Других решений пока нет …