I have code that prints words from text, but it need to be shuffled. Code works, but words are repeated. What should i change to get unique words only?
#define MAX_MESSAGES (3)
#define MAX_MESSAGE_LEN (150)
static char message[MAX_MESSAGES][MAX_MESSAGE_LEN] = {{'\0'}};
static char buffer[MAX_MESSAGE_LEN] = {'\0'};
int main()
{
/*declare and initialise variable*/
int i=0;
int j;
FILE *file_in;
if( NULL == (file_in=fopen("test.txt", "r") ) )
{ // then, fopen failed
perror( "fopen failed for test.txt" );
exit( EXIT_FAILURE );
}
// implied else, fopen successful
srand(time(NULL));
/*stores and prints the data from the string*/
while( (i<MAX_MESSAGES) && fgets(buffer,150,file_in) )
{
strcpy(message[i],buffer);
i++;
} // end while
printf("\ndisplay %d messages in random order\n", MAX_MESSAGES);
printf("with possible repeated messages and skipped messages\n");
for( i=0; i < MAX_MESSAGES; i++)
{
j = rand() % MAX_MESSAGES;
printf("%s\n",message[j]);
} // end for
return 0;
}
i'm aware about Fisher-Yates shuffle method, i found how function is described, but i don't understand how to call it in my code.
void shuffle(int *array, size_t n)
{
if (n > 1) {
size_t i;
for (i = 0; i < n - 1; i++) {
size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
int t = array[j];
array[j] = array[i];
array[i] = t;
}
}
}