簡體   English   中英

如何使用Rand函數在C中使用3到9個字符的長度生成隨機單詞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM