我正在尝试使用srand
和rand
生成随机数。在这里,我想生成特定的数字。当我在某个时间执行我的程序时,如果我要求生成5位数的数字,那么它就不会给我所需的输出。
我的代码是
for(k=0;k<n;k++)
{
temp = temp*10;
}
srand(time(NULL));
i = rand()%temp;
printf("%d\n",i);
k = 0;
temp = n;
while(i != 0)
{
arr1[n+k] = i%10;
i = i/10;
n--;
}
输出
Number of digits you want : 5
2031
while loop 1
while loop 3
while loop 0
while loop 2
N is 1
arr1[1] = 10651312
arr1[2] = 2
arr1[3] = 0
arr1[4] = 3
arr1[5] = 1
告诉我获得所需位数的问题在哪里。
Edit
我运行该代码大约100次,在这四次中它不起作用,休息很好......
答案 0 :(得分:2)
问题是你是在循环你生成的随机数的大小而不是数组的大小。在您的示例中,您需要五位数,但您的代码生成了一个四位数字,即2031.这意味着在底部循环的迭代中
在[1]中留下随机垃圾。如果您的随机数确实包含5位数字,而不是4位数,那么它将正确完成循环。
相反,你想要循环n
for(int j = n; j > 0; --j)
{
arr1[n+j] = i%10;
i = i/10;
}
请注意,这仍然是使用数组作为1,而c数组是基于0,即它们从元素0开始,即为了使用arr1 [5]你需要malloced或声明6数组元素或6 * sizeof(int)字节。另请注意,您应使用比temp
更好的变量名称,并且重用变量没有任何好处:您的编译器将自动重用寄存器并为您排序。
答案 1 :(得分:2)
这里有几个问题。
首先,在实际产生随机数之前调用srand()一次。
其次,你的方法将返回的数字模数为10的幂,当然也会返回较低的数字。例如,n%100000可以是0到99999之间的任何值。
答案 2 :(得分:1)
n = rand() % (largest - smallest + 1) + smallest;
如果您想要一个5位数字,最小的5位数是多少?对最大数量做同样的事情。这可用于任何数字范围,无需填充数组或任何内容。
现在您只需要弄清楚如何为指定的位数生成最大和最小值。
快乐的编码!