I have a struct that have 6 members. I want to shuffle the struct so when the user hits the Enter key the struct members randomly prints out like this:
First time:
Member3 - Member1
Member4 - Member6
Member5 - Member2
Second time:
Member1 - Member6
Member3 - Member5
Member2 - Member4
And so on as long as the user hits the Enter kyboard the members shuffle.
This is what I have so far:
int main(void) {
struct Members[] = {
{ "Member1", 0, 0, 0},
{ "Member2", 0, 0, 0},
{ "Member3", 0, 0, 0},
{ "Member4", 0, 0, 0},
{ "Member5", 0, 0, 0},
};
do
{
Shuffle(Members, 6)
}while(getch() != ESC);
}
EDIT: Is this a good implementation of Fisher-Yates shuffle?
static int rand_int(int n)
{
int limit = RAND_MAX - RAND_MAX % n;
int rnd;
do
{
rnd = rand();
}while(rnd >= limit);
return rnd % n;
}
void shuffle(Members *s, int n)
{
int i, j;
Members tmp;
for(i = n - 1; i > 0; i--)
{
j = rand_int(i + 1);
tmp = s[j];
s[j] = s[i];
s[i] = tmp;
printf("%s\t - %s\n", s[j], s[i]);
}
}