int questionNumbers[100];
int i;
int j;
int r;
for (i = 0; i < 100; i++)
{
questionNumbers[i] = i;
}
for (i = 99; i > 0; i--)
{
r = arc4random() % (i + 1);
if (r < i)
{
j = questionNumbers[i];
questionNumbers[i] = questionNumbers[r];
questionNumbers[r] = j;
}
}
questionNumbers[] now contains the integers from 0 to 99 in a random order. Take the first 50 entries one at a time to determine which questions to use.
int questionNumbers[result.count];
int i;
int j;
int r;
for (i = 0; i < result.count; i++)
{
questionNumbers[i] = i;
}
for (i = 99; i > 0; i--)
{
r = arc4random() % (i + 1);
if (r < i)
{
j = questionNumbers[i];
questionNumbers[i] = questionNumbers[r];
questionNumbers[r] = j;
}
}
But how can I change this:
Code:
for (i = 99; i > 0; i--)
{
r = arc4random() % (i + 1);
if (r < i)
{
j = questionNumbers[i];
questionNumbers[i] = questionNumbers[r];
questionNumbers[r] = j;
}
}
To make it work like this:
Code:
for (i = result.count; i > 0; i--)
{
r = arc4random() % (i + 1);
if (r < i)
{
j = questionNumbers[i];
questionNumbers[i] = questionNumbers[r];
questionNumbers[r] = j;
}
}
questionNumbers[] only has result.count entries, so the largest index for questionNumbers[] is (result.count - 1), but if i = result.count, the loop is trying to access questionNumbers[result.count], which does not exist.
No, as when i = 0, arc4random() % (i + 1) will always return 0, so no switching will take place (since it would always switch questionNumbers[0] with questionNumbers[0]).