在C中,如何使用特定模式初始化数组?

时间:2016-05-05 12:16:03

标签: c arrays

我想在模式后面用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.
    }
}

2 个答案:

答案 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(这将是最后一次迭代)。此时,您的ifelse if部分会尝试访问职位array[j+2]array[j+3]array[j+5]

    但是,您已声明array的大小为i,因此语句为:

    array[j+2] = ... ;
    array[j+3] = ... ;
    array[j+5] = ... ;
    
    ji-1

    将等同于:

    array[i+1] = ... ;
    array[i+2] = ... ;
    array[i+4] = ... ;
    

    定义索引越界。

答案 1 :(得分:2)

k = Rand_Gen();移到for循环中。

目前您只生成一次“k”值。

同时访问j+2索引也会超出限制访问权限。