gpt4 book ai didi

c - C 中的 Rand() 函数用于随机 ASCII - 字符(仅限字母和数字)

转载 作者:行者123 更新时间:2023-11-30 19:28:51 25 4
gpt4 key购买 nike

我知道如何使用 C 语言中的 rand() 函数创建随机值,其中只有一个特定的最小值和最大值。现在我想编写一个具有多个最小值和最大值的程序,因为我的返回值应该是随机的 ASCII 字符,但只有字母和数字,而我有点被困在这里。有人可以给我提示如何解决这个问题吗?谢谢!

最佳答案

这将从范围[][]中的某个间隔输出随机字符,该函数首先生成一个小于或等于所有范围之和的随机值,然后遍历这些范围以查看哪个范围值下降。

例如,对于 {{10,20}, {25, 29}},当随机数为 0 时,它会从 {10, 20} 映射到 10,从 {25, 29} 映射到 11 到 25,从 {25, 29} 映射到 12 到26 等.

# include <stdlib.h>
# include <stdio.h>
# include <stdarg.h>
# include <sys/time.h>

# define LEN(X) (sizeof (X) / sizeof (X)[0])

void
putrandomchar(void)
{
const char ranges[][2] = {{'0', '9'}, {'A', 'Z'}, {'a', 'z'}};

int max = 0;
for (int i = 0; i < LEN(ranges); i++)
max += ranges[i][1] - ranges[i][0] + 1;

char n = random() % max;
for (int i = 0; i < LEN(ranges); i++) {
int L = ranges[i][1] - ranges[i][0] + 1;
if (n < L) {
putchar(n + ranges[i][0]);
break;
}
n -= L;
}
}

int
main(void)
{
struct timeval tv;
gettimeofday(&tv,NULL);
srandom((time_t)tv.tv_usec);
for (;;)
putrandomchar();
return 0;
}

关于c - C 中的 Rand() 函数用于随机 ASCII - 字符(仅限字母和数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53583861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com