Вы должны вызывать srand
только один раз в своем коде, и вы должны называть это "случайным" начальным числом, например time(NULL)
.
Вызвав srand
в цикле и каждый раз вызывая его с нулем 0, вы получите шесть одинаковых чисел.
Однако даже с этими исправлениями rand()%50
может дать вам одно и то же число дважды. То, что должен использовать, - это алгоритм случайного воспроизведения, подобный , этот , поскольку он работает точно так же, как лотерейные машины.
Вот полная программа, показывающая это в действии:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
static void getSix (int *dst) {
int sz, pos, i, src[50];
for (i = 0; i < sizeof(src)/sizeof(*src); i++)
src[i] = i + 1;
sz = 50;
for (i = 0; i < 6; i++) {
pos = rand() % sz;
dst[i] = src[pos];
src[pos] = src[sz-1];
sz--;
}
}
int main (void) {
srand (time (NULL));
int i, numbers[6];
getSix (numbers);
printf ("Numbers are:\n");
for (i = 0; i < sizeof(numbers)/sizeof(*numbers); i++)
printf (" %d\n", numbers[i]);
return 0;
}
Примеры прогонов:
Numbers are:
25
10
26
4
18
1
Numbers are:
39
45
8
18
17
22
Numbers are:
8
6
49
21
40
28
Numbers are:
37
49
45
43
6
40