添加到单个数组元素 - C ++

时间:2015-11-09 04:38:33

标签: c++

我需要为数组中的所有元素添加+0.25或-0.25。这是我到目前为止所拥有的。任何帮助将不胜感激。

int main() {

double i;


// Arrays
double x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double x2[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};



for(i=1; i<=10; i++) {
    const double pM[2] = {-1, 1};
    int randoid = rand() % 2;
    for(i=1; i<=10; i++){
        x2[i] = x[i] + pM[randoid]*0.25; //Error Line
    }
}

cout << x;
cout << x2;
}

我在标记的行中收到此错误:&#34;无效类型&#39; double [10] [double]数组下标&#34;

3 个答案:

答案 0 :(得分:3)

问题是i是双倍的。然后你写x2[i]

这不是一个非常好的错误信息;但是对于[]运算符,其中一个操作数必须是指针,另一个必须是整数。使用此运算符时,不会将浮点隐式转换为整数。

要将此更改double i;修正为int i;

另一个问题是您的代码访问超出数组的范围。 double x2[10]表示有10个元素,其索引为09。但是你的循环尝试写入x2[10]。这会导致未定义的行为,这可以解释您的奇怪输出。

还存在潜在的逻辑错误。也许你的意思是为内循环使用不同的变量而不是外循环。就目前而言,内部循环将i转换为11(或10,如果您修复代码),然后外部循环将完成,不再执行任何迭代。

虽然根据你的描述,也许你只想在一开始就有一个循环。如果是这样,移除外环并将内容留在那里。

此外,您不需要两个单独的阵列,您可以就地执行添加。

关于输出,cout << xcout << x2将输出数组所在的内存地址的编号。要输出数组的内容,您需要编写另一个循环,或使用迭代容器的标准库算法。

答案 1 :(得分:1)

我看到3个问题 -

  1. i的类型更改为int
  2. xx2是大小为10的数组。您需要从i = 0循环到i = 9。但是您正在从i = 1循环到i = 10x[10] 由于arrays被编入索引,因此超出范围。
  3. cout << x - 这是打印数组的错误方法。你需要 循环遍历阵列并打印 - 例如 -

    for(i = 0; i < 10; i++)
        cout << x[i] << " ";
    

答案 2 :(得分:0)

试试这个,它有效,我转换为C

int main(  )
{

  int i = 0;
// Arrays
  double x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  double x2[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  for ( i = 1; i < 10; i++ )
  {
    const double pM[2] = { -1, 1 };
    int randoid = rand(  ) % 2;
    for ( i = 1; i <= 10; i++ )
    {
      x2[i] = x[i] + pM[randoid] * 0.25;    //Error Line

      printf( "\nx[%d]==%2.2f", i, x[i] );
      printf( "\nx2[%d]==%2.2f", i, x2[i] );

    }
  }

}