我在按照隨機順序打印出來時遇到了一些麻煩。我插入的8個單詞將需要以隨機順序打印出來。現在我只能以隨機順序生成其中的一些,因爲如果生成兩次相同的數字,它將覆蓋之前的空間。我怎樣才能消除這個問題?以隨機順序輸入字符串並將它們打印
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#define MAX 50
int readLine(char string[]);
int main(void)
{
int i;
char str[8][MAX], temp[8][MAX];
srand((unsigned)time(NULL));
int r_num;
printf("Enter 8 words:\n");
for(i=0; i<8; ++i)
{
readLine(str[i]);
}
for (int i = 0; i < 8; i++)
{
r_num = rand()%8+1;
strcpy(temp[r_num], str[i]);
}
printf("\nRandom order of words: \n");
for(i=0; i<8; ++i)
{
printf("%s\n", temp[i]);
}
printf("\n");
return 0;
}
int readLine(char string[])
{
int ch;
int i=0;
while (isspace(ch = getchar()))
;
while (ch != '\n' && ch != EOF)
{
if (i < MAX)
{
string[i++] = ch;
ch = getchar();
}
}
string[i] = '\0';
return i;
}
的感謝!這對我來說很簡單。我沒有得到的是,當你生成一個隨機數時,它會從第一次選擇一個範圍,即從0到8。第二次0到7 ..至少這是我假設它做的。那麼爲什麼它不會兩次選擇相同的數字呢?即第一次5,然後第二次5? – xxFlashxx
@Alex第一次選擇5時,通過交換將5移動到陣列的後部。所以候選者第二次是[0,1,2,3,4,7,6],而* index * 5可以再次選擇,* data * 5將不會被再次選擇。 'i'從7開始(元素個數 - 1),所以第一次迭代的範圍是0到7(非負數模(7 + 1)),而不是0到8。第二次是0到6。從一個候選人中選擇是顯而易見的,所以可以使用'i> 0'來代替'i> = 0'。 – MikeCAT