我想在模式后面用C初始化一个数组。
例如,这里有两个包含10个元素的数组。每个阵列都有以下元素:{0,0,2,3,0,7,0,1,9,0}
这是我的代码:注意:上面的例子和下面的代码没有关系,只是为了详细说明我的案例中“模式”的定义。
void CreateArray()
{
int i = ArraySize();
int j;
int k = Rand_Gen();
printf("%d\n",i);
int array[i];
for (j=0;j<i;j++)
{
if (k>0 && k<=30)
{
array[j]=4;
array[j+2]=23;
array[j+5]=900;
printf("%d",array[j]);
}
else if (k>30 && k<=60)
{
array[j]=2;
array[j+3]=54;
array[j+5]=870;
printf("%d",array[j]);
}
else
{
array[j]=0;
printf("%d",array[j]);
}
}
}
但是,运行此程序后,我只能获得具有相同元素的数组。在这种情况下,有一半的时间我只得到一个数组4,而有一半时间得到2
我已经完成谷歌搜索,但我找不到可能的解决方案来解决我的问题。或者,也许我打印数组元素的方法不正确?
先谢谢
跟进:
我试过在循环中添加“int k = Rand_Gen()”,但我仍然只能得到一个数字。以下是代码的更新部分:
void CreateArray()
{
int i = ArraySize();
int j;
printf("%d\n",i);
int array[i];
for (j=0;j<i;j++)
{
int k = Rand_Gen();
//some if statements here.
}
}
答案 0 :(得分:3)
您使用:
int k = Rand_Gen();
外 您的for
循环。这意味着k
只会创建一次。因此,for
循环将以i
的相同值执行k
次,因此它将输入if-else
语句的相同部分。您需要在 循环中生成k
。
另一个问题是您的索引&#39; j&#39;离开你的数组边界。特别是,您的循环运行如下:
for (j=0;j<i;j++)
在某些时候,j
将达到值i-1
(这将是最后一次迭代)。此时,您的if
和else if
部分会尝试访问职位array[j+2]
,array[j+3]
和array[j+5]
。
但是,您已声明array
的大小为i
,因此语句为:
array[j+2] = ... ;
array[j+3] = ... ;
array[j+5] = ... ;
j
为i-1
的将等同于:
array[i+1] = ... ;
array[i+2] = ... ;
array[i+4] = ... ;
定义索引越界。
答案 1 :(得分:2)
将k = Rand_Gen();
移到for循环中。
目前您只生成一次“k”值。
同时访问j+2
索引也会超出限制访问权限。