C 为什么在将值写入数组时出错?
我试图确定为什么将随机值写入数组会导致问题 实际上,我要求rC 为什么在将值写入数组时出错?,c,random,vector,srand,C,Random,Vector,Srand,我试图确定为什么将随机值写入数组会导致问题 实际上,我要求r和()生成介于1和10之间的数字(rand()%10+1,之前带有srand(time(NULL))),第一个值总是大于10:它也是一个随机数,介于10和20之间。我真的不知道如何解决这个问题,因为它看起来像是rand和srand函数的问题。然而,这是我的代码: 编辑:正确的代码,现在 #包括 #包括 #包括 #定义SIZEA 100 #定义SIZEFREQ 10 int main() { inta[SIZEA]={0},频率[SIZE
和()
生成介于1和10之间的数字(rand()%10+1
,之前带有srand(time(NULL))
),第一个值总是大于10:它也是一个随机数,介于10和20之间。我真的不知道如何解决这个问题,因为它看起来像是rand
和srand
函数的问题。然而,这是我的代码:
编辑:正确的代码,现在
#包括
#包括
#包括
#定义SIZEA 100
#定义SIZEFREQ 10
int main()
{
inta[SIZEA]={0},频率[SIZEFREQ]={0};
int i、temp、gothrough;
srand(时间(空));
对于(i=0;i我编译了您的代码,它生成的值介于1和10之间。无法超过范围0-9(或1-10+1)使用%
,因为一旦它达到10,就意味着/
将高出1,模必须从0开始。编辑:你不能用30除以10,然后用余数10表示它是2,因为这个余数将转换为10分之一的+1,也就是说,30除以10=3,余数0。原因是什么这很简单
a[i]
介于1和10之间,因此在编写时:
++frequency[a[i]+1];
您正在填充frequency
的索引2到11。但是,frequency
只有索引0到10。因此,您将遍历数组frequency
并进入数组a
并写入a[0]
。当a[i]时会发生这种情况
是10。因为100个数字有10%的几率得到10,所以将a[0]
(通过增加频率[11]
)大约10倍。因为第一个值也在1和10之间,所以最终值在10和20之间
编辑:与将a
从0索引到SIZE-1
的原因相同,您还应该将频率从0索引到10。您要做的是创建从1到10的索引,和同时+1它们!例如:
for(i=1;i<=10;i++)
printf("%5d%10d\n",i,frequency[i+1]);
通过i-1
索引frequency
,使索引正确。没有办法rand()%10+1
可以返回[1;10]
间隔之外的值。我已经运行了您的代码,它似乎工作正常。最后一个循环将输出frequency[11]
这是未定义的行为。这可能是您困惑的根源吗?当您添加新代码时,为什么留下不正确的版本?如果有人想查看过去的版本,他们可以查看编辑历史记录(单击显示“已编辑时间戳”的时间)。我现在已经更正了我的源代码,正如您在这里看到的:很好。在您的代码中,请记住将%10
更改为%SIZEFREQ
;)
for(i=1;i<=10;i++)
printf("%5d%10d\n",i,frequency[i+1]);
for(i=0;i<10;i++)
printf("%5d%10d\n",i,frequency[i]);
for(i=1;i<=10;i++)
printf("%5d%10d\n",i,frequency[i-1]);