I wrote the following code i order to randomly choose a word from a given array of words without choosing the same word twice. (I want to choose only 4 words). After dry running the program and testing it, everything seems to be working fun and no duplicates where encountered, however I would like to have a second verification since I am new to programming.
char words[10][10] = {"dog", "cat", "horse", "cow", "goat", "monkey", "elephant", "crow", "fish", "snake"};
void getRandomWords()
{
int i = 0, k = 0;
srand((unsigned)time(NULL));
n = rand() % 10;
checkRandom[k] = n;
k ++;
for (int j = 0; j < 10; j ++) {
printf("%c\n", words[n][j]);
}
do {
n = rand() % 10;
for (int t = 0; t < 4; t ++) {
if (checkRandom[t] == n) {
found = 1;
break;
}
else
found = 0;
}
if (found == 0) {
checkRandom[k] = n;
k ++;
for (int j = 0; j < 10; j ++) {
printf("%c\n", words[n][j]);
}
i++;
}
} while (i < 3);
}
You can use a variant of the Fisher-Yates shuffle algorithm to quickly produce a randomly-ordered sequence without duplicates. A slightly simplified version of the "inside-out" algorithm is:
void shuffle(int *array, int length) {
int i, value;
array[0] = 0;
for (i = 1 ; i < length ; i++) {
value = rand() % (i + 1);
array[i] = array[value];
array[value] = i;
}
}
You could do something similar to generate a random array of integers, then use those integers to index your word array.