Hej, widzę, że nie zdążyłem odpowiedzieć wystarczająco szybko przed kolegami powyżej. Tak jak sugerowano wcześniej, kiedy szukasz losowych unikatowych liczb z przedziału 1-20 polecam skorzystać z algorytmu Fishera-Yatesa. Wypełniasz tablicę wartościami 1-20 i wykonujesz algorytm, który tę tablicę pomiesza. Teraz mając tablicę losowych wartości możesz je po kolei sobie wyjmować i robić co tam sobie potrzebujesz. Mała uwaga dotycząca jakości kodu:
- Staraj się nazywać metody, funkcje i zmienne po angielsku.
- Unikaj nazw, które nic nie mówią tak jak w twoim wypadku jest to:
int w;
A no i masz przykładowy kod, który zwraca w tablicę z losowymi wartościami 1-20 (przerobiony twój program):
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void losowanie(int tablicaDoPomieszania[], int wielkoscTablicy)
{
srand(time(NULL));
for (int i = wielkoscTablicy - 1; i > 0; i--)
{
int j = rand() % (i + 1);
int tymczasowaTablica = tablicaDoPomieszania[i];
tablicaDoPomieszania[i] = tablicaDoPomieszania[j];
tablicaDoPomieszania[j] = tymczasowaTablica;
}
}
int main() {
int tablicaLosowychLiczb[20];
//Wypełniam tablicę wartościami od 1-20 po kolei
for (int i = 0; i <= 20 - 1; i++) {
tablicaLosowychLiczb[i] = i + 1;
}
int wielkoscTablicy = sizeof(tablicaLosowychLiczb) / sizeof(tablicaLosowychLiczb[0]);
//Układam wszystkie wartości w tablicy w sposób losowy by nie były po kolei
losowanie(tablicaLosowychLiczb, wielkoscTablicy);
//wypisuję wszystkie wartości z tablicy po kolei według indeksu
for (int i = 0; i <= 20 - 1; i++) {
printf("index: %d | %d\n",i , tablicaLosowychLiczb[i]);
}
return 0;
}