首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Rand函数在C中生成长度为3到9个字符的随机词?

如何使用Rand函数在C中生成长度为3到9个字符的随机词?
EN

Stack Overflow用户
提问于 2016-12-04 10:42:20
回答 1查看 375关注 0票数 0

我尝试使用两个for循环来生成一个范围在3到9个字符之间的随机单词序列,总共运行1000次。

内部for循环生成一个随机的单个字母,然后将这些字母组合在一起生成3-9个字符的单词。

到目前为止,我已经做到了:

代码语言:javascript
运行
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-04 13:41:27

继续我的评论,您当前使用for (j = 3; j < 10; j++)的循环索引超出了word的界限。此外,您不知道word[0-2]中将包含什么内容,因为word未初始化,并且您从未使用任何内容填充索引0-2。此外,在C中,当您声明char word[8];时,只有8字符可以添加到索引0-7中的word

如果您打算将数组用作字符串,则C要求字符串以nul结尾(例如,使用nul字节,即0'\0' (它们等效)作为字符串的最后一个字符)。尝试将word作为字符串使用而不以nul结尾是未定义的行为(例如,在word上调用printf("Word: %s", word[j]);而不以nul结尾)

你不需要两个循环,你只需要在你要生成的每个单词的3-9之间有一个随机的长度。在进入循环为word生成字符之前,这可以是对rand()的单独调用。

要解决所有问题(请注意包含了用于rand()srand()stdlib.h ),您可以执行类似以下操作:

代码语言:javascript
运行
复制
#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;
}

示例使用/输出

代码语言:javascript
运行
复制
$ ./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;后面的注释“也是通过初始化完成的”。想一想为什么这种显式的nul终止可以在那里消除。如果你有任何问题,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40954807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档