您好我正在编写一个程序,可以生成10个随机字符以形成一个单词(这是一个游戏)。
所以这是我的功能:
void GenerateTen(int number)
{
int i;
char abc[30]="abcdefghijklmnopqrstuvwxyz";
char newabc[8];
for (i = 0; i < number; ++i) {
newabc[i] = abc[rand() % (sizeof(abc) - 1)];
printf("%c ", newabc[i]);
}
newabc[number] = 0;
}
数字变量包含10,输出应该只是在数组中打印这10个字符。编译器没有错误,但程序会生成相同的字符集。谢谢您的帮助! : - )
答案 0 :(得分:2)
我遇到了你的问题。你必须播种它。随着时间播种它是一个好主意:srand()
rand()会返回pseudo-random个数字。它根据给定的算法生成数字。该算法的起点始终相同,因此您将看到为每次调用生成的相同序列。
您可以使用 srand 函数设置随机生成器的“种子”(仅在程序中调用一次srand)。从 rand()生成器获取不同序列的一种常用方法是将种子设置为当前时间或进程的id:
程序开头的srand(time(NULL)); 或 srand(getpid()); 。
参考:https://stackoverflow.com/a/1108810/5352399
您可以按照以下方式更新代码。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(NULL));
for(int i = 0; i < 5; i++){
GenerateTen(8);
}
return 0;
}
void GenerateTen(int number) {
int i;
char abc[26]="abcdefghijklmnopqrstuvwxyz";
char newabc[8];
for (i = 0; i < number; ++i) {
newabc[i] = abc[rand() % (sizeof(abc) - 1)];
printf("%c ", newabc[i]);
}
newabc[number] = 0;
}
输出:
r x r a f d a b
f f t i x m l b
r k j e p h d v
s w a c p g v h
e n j l r j n w
答案 1 :(得分:1)
您需要使用srand()
初始化伪随机数生成器。
只需在main()
之后添加此内容。
srand(time(NULL));
srand(time(NULL))
实际执行的是srand()
使用种子值生成伪随机数,time(NULL)
返回当前日历时间。
因此从理论上讲,您的srand()
函数可以保证在每个运行时获得不同的种子值。因此,rand()
产生的值每次都会有所不同。