2015-09-13 116 views
0

当前我正在尝试编写一个简单的程序来生成一个随机字符串来表示一个名称。调用它会产生我想要的,但是如果我再次调用函数来创建姓氏,我会得到与名字,长度和一切相同的结果。我目前在时间()的时候将兰德排在第一位,所以我不确定什么是错的/我能做什么。任何帮助将不胜感激,谢谢你的时间。rand()即使在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; 

} 

再次,感谢您的时间。

+0

平台,编译器,运行时库?不相关,但是由于没有释放'generateName'的结果而泄漏了内存。 –

+0

对不起,我是一个相对较新的程序员,我在Windows 10上使用Visual Studio 2013,希望能回答你的问题。 –

+0

我是一个完全的傻瓜,我完全没有看到我第二次打印什么。 –

回答

4

我想你产生姓没事,但是当你打印:

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

看到了吗?您正在重新输入名字!

只要做到:

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

PS:关于VisualStudio的最好的事情是它的集成调试器。你应该学会使用它,这些错误会显示出来。

0

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

printf(“Last:%s \ n \ n”,firstName);

相关问题