[英]How to use Rand function to generate a random word using a length ranging from 3 to 9 characters in C?
我正在嘗試使用兩個for循環來生成一個隨機的單詞序列,范圍在3到9個字符之間,總共可以運行1000次。
內部的for循環生成一個隨機的單個字母,然后將其組合以生成3到9個字符的單詞。
到目前為止,我有:
#include <stdio.h>
#include <time.h>
int main()
{
int i, j;
int RandomNumber;
char letter[0];
char word[8];
char testword[4] = "test";
// generate random word
for (j = 3; j < 10; j++) {
RandomNumber = rand() % 26;
printf("%d", RandomNumber);
word[j] = 'a' + RandomNumber;
printf("Word: %s", word[j]);
}
return 0;
}
繼續我的評論,您當前正在使用for (j = 3; j < 10; j++)
的循環索引for (j = 3; j < 10; j++)
超出word
的范圍。 另外,您不知道word[0-2]
會有什么,因為word
沒有初始化,並且您永遠不會用任何東西填充索引0-2
。 同樣,在C中,當您聲明char word[8];
您只能在索引0-7
word
中添加8
字符。
如果打算將數組用作字符串 ,則C要求字符串以nul終止 (例如,使用nul-byte ,即0
或'\\0'
(它們等效)作為字符串的最后一個字符)。 嘗試將word
作為字符串使用而不會被nul終止是未定義的行為 (例如,調用printf("Word: %s", word[j]);
在未被nul終止的 word
上調用)
您不需要兩個循環,只需要為要生成的每個單詞在3-9
之間的隨機長度即可 。 在進入循環以生成word
字符之前,這可以是對rand()
的單獨調用。
要解決所有問題(並注意到rand()
和srand()
包含stdlib.h
),您可以執行類似以下操作:
#include <stdio.h>
#include <stdlib.h> /* for rand()/srand() */
#include <time.h>
enum { MINW = 3, MAXW = 9 }; /* constants for min/max length */
int main (void)
{
int i, randlength;
char word[MAXW+1] = ""; /* initialize your variables */
i = randlength = 0;
srand (time (NULL)); /* initialize the random number generator */
randlength = rand() % (MAXW - MINW + 1) + MINW; /* randlength of 3-9 */
printf ("length : %d\n\n", randlength);
for (i = 0; i < randlength; i++) {
int randomnumber = rand() % 26,
randchar = 'a' + randomnumber;
printf(" number[%2d] : %2d '%c'\n", i, randomnumber, randchar);
word[i] = randchar;
}
word[i] = 0; /* nul-terminate (note: also done by initialization) */
printf ("\nWord : %s\n", word);
return 0;
}
使用/輸出示例
$ ./bin/randword
length : 3
number[ 0] : 8 'i'
number[ 1] : 20 'u'
number[ 2] : 0 'a'
Word : iua
$ ./bin/randword
length : 8
number[ 0] : 24 'y'
number[ 1] : 13 'n'
number[ 2] : 12 'm'
number[ 3] : 14 'o'
number[ 4] : 9 'j'
number[ 5] : 6 'g'
number[ 6] : 9 'j'
number[ 7] : 12 'm'
Word : ynmojgjm
重要的是您要理解word[i] = 0;
之后的注釋word[i] = 0;
“也可以通過初始化完成” 。 考慮一下為什么可以在那里消除明確的終止作用 。 如果您有任何疑問,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.