我需要为数组中的所有元素添加+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;
答案 0 :(得分:3)
问题是i
是双倍的。然后你写x2[i]
。
这不是一个非常好的错误信息;但是对于[]
运算符,其中一个操作数必须是指针,另一个必须是整数。使用此运算符时,不会将浮点隐式转换为整数。
要将此更改double i;
修正为int i;
另一个问题是您的代码访问超出数组的范围。 double x2[10]
表示有10
个元素,其索引为0
到9
。但是你的循环尝试写入x2[10]
。这会导致未定义的行为,这可以解释您的奇怪输出。
还存在潜在的逻辑错误。也许你的意思是为内循环使用不同的变量而不是外循环。就目前而言,内部循环将i
转换为11
(或10
,如果您修复代码),然后外部循环将完成,不再执行任何迭代。
虽然根据你的描述,也许你只想在一开始就有一个循环。如果是这样,移除外环并将内容留在那里。
此外,您不需要两个单独的阵列,您可以就地执行添加。
关于输出,cout << x
和cout << x2
将输出数组所在的内存地址的编号。要输出数组的内容,您需要编写另一个循环,或使用迭代容器的标准库算法。
答案 1 :(得分:1)
我看到3个问题 -
i
的类型更改为int
。x
和x2
是大小为10的数组。您需要从i =
0
循环到i = 9
。但是您正在从i = 1
循环到i = 10
。 x[10]
由于arrays
被编入索引,因此超出范围。 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] );
}
}
}