即使在srand()之后,rand()也会产生相同的结果

时间:2015-09-13 20:05:46

标签: c++ random srand

目前我正在尝试编写一个简单的程序来生成一串随机字符来表示名称。调用它会产生我想要的东西,但是如果我再次调用该函数来创建姓氏,我会得到与第一个名称,长度和所有内容相同的结果。我目前用时间()来顶级兰德,所以我不确定我的错误/我能做什么。感谢你的时间,感谢任何帮助。

我的代码如下:

 int main(void)
{
    srand(time(NULL));
    int randomNum = 0;
    char firstName[12] = { 0 };
    char lastName[36] = { 0 };
    char fullName[50] = { 0 };

    /*for (int j = 0; j < 20; j++)
    {
    */  randomNum = rand() % 10 + 2;
        strcpy(firstName, generateName(randomNum));
        printf("First: %s\n", firstName);

        randomNum = rand() % 34 + 2;
        strcpy(lastName, generateName(randomNum));
        printf("Last: %s\n\n", firstName);


        //strcat(fullName, firstName);
        //strcat(fullName, " ");
        //strcat(fullName, lastName);

    //}



    //getchar();

    return 0;
}

generateName函数如下:

char* generateName(int length)
{
    char* randomName = NULL;

    randomName = (char*)malloc(sizeof(char) * (length + 1));
    if (randomName)
    {
        randomName[0] = rand() % 26 + 65;

        for (int i = 1; i < length; i++)
        {
            randomName[i] = rand() % 26 + 97;
        }
        randomName[length] = '\0';
    }
    return randomName;

}

再次,谢谢你的时间。

2 个答案:

答案 0 :(得分:4)

我认为您可以正确生成姓氏,但是当您打印它时:

printf("Last: %s\n\n", firstName);
                       ^here

请参阅?您再次打印第一个名字!!

只是做:

printf("Last: %s\n\n", lastName);

PS:VisualStudio的最佳之处在于它的集成调试器。你应该学会使用它,这些错误会显示出来。

答案 1 :(得分:0)

您在第二个print语句中打印firstName而不是lastName:D否则您的代码没问题 - 在每次运行中生成一个新名称。

  

printf(&#34; Last:%s \ n \ n&n;&#34;,firstName);