Zakres od 1 do 49 nie jest obszerny. Lepszym rozwiązaniem będzie więc:
- Stworzenie tablicy liczb i wypełnienie jej.
- Potasowanie tablicy z liczbami.
- Wybranie pierwszych 5 i wyświetlenie ich.
Teraz Twój kod wykonuje się niedeterministycznie. Jeśli "masz nieszczęście" losowania ciągle tych samych liczb, będzie wykonywał się długo.
Co do pkt. 2 proponowanego rozwiązania, wystarczy losować 2 indeksy tablicy i zamienić miejscami elementy :-)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shake_table(int * table, size_t size) {
srand((unsigned)time(NULL));
for(size_t i = 0; i < size; ++i) {
size_t first_index = rand() % size;
size_t second_index = rand() % size;
/* Swap value */
int value = table[first_index];
table[first_index] = table[second_index];
table[second_index] = value;
}
}
void fill_table(int * table, size_t size) {
while(size--) {
table[size] = size + 1;
}
}
void show_elements(int * table, size_t size) {
printf("Wylosowano %zu elementów:\n", size);
for(size_t i = 0; i < size; ++i) {
printf("%d ", table[i]);
}
puts("");
}
int main(void) {
int table[49];
size_t table_size = sizeof(table) / sizeof(table[0]);
fill_table(table, table_size);
shake_table(table, table_size);
show_elements(table, 5);
return EXIT_SUCCESS;
}