rand() 即使在 srand() 之后也产生相同的结果
rand() producing the same results even after srand()
目前我正在尝试编写一个简单的程序来生成一串随机字符来表示一个名称。调用它一次会产生我想要的结果,但是如果我再次调用该函数来生成姓氏,我会得到与名字、长度和所有内容相同的结果。我目前使用 time() 在顶部播种 rand,所以我不确定 wrong/what 我能做什么。任何帮助将不胜感激,感谢您的宝贵时间。
我的代码如下:
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] = '[=11=]';
}
return randomName;
}
再次感谢您的宝贵时间。
我认为你生成姓氏没问题,但是当你打印它时:
printf("Last: %s\n\n", firstName);
^here
看到了吗?您又在打印名字了!!
就这样:
printf("Last: %s\n\n", lastName);
PS:VisualStudio 最好的地方在于它的集成调试器。你应该学会使用它,这些错误会自己出现。
您在第二个 print 语句中打印 firstName 而不是 lastName :D 否则您的代码没问题 - 在每个 运行.
中生成一个新名称
printf("Last: %s\n\n", firstName);
目前我正在尝试编写一个简单的程序来生成一串随机字符来表示一个名称。调用它一次会产生我想要的结果,但是如果我再次调用该函数来生成姓氏,我会得到与名字、长度和所有内容相同的结果。我目前使用 time() 在顶部播种 rand,所以我不确定 wrong/what 我能做什么。任何帮助将不胜感激,感谢您的宝贵时间。
我的代码如下:
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] = '[=11=]';
}
return randomName;
}
再次感谢您的宝贵时间。
我认为你生成姓氏没问题,但是当你打印它时:
printf("Last: %s\n\n", firstName);
^here
看到了吗?您又在打印名字了!!
就这样:
printf("Last: %s\n\n", lastName);
PS:VisualStudio 最好的地方在于它的集成调试器。你应该学会使用它,这些错误会自己出现。
您在第二个 print 语句中打印 firstName 而不是 lastName :D 否则您的代码没问题 - 在每个 运行.
中生成一个新名称printf("Last: %s\n\n", firstName);