我在添加数组的每个元素然后将数组中的下一个元素添加到结果时遇到问题,我尝试了不同的方法但是,无法让它在这里工作是代码示例:
#include <stdio.h>
int main()
{
int array[] = {1,2,3,4,5,6,7,8,9,10};
int result = 0;
int resultB = 0;
for(int i = 0 ;i < 10; i++)
{
result = array[i]+array[i+1];
resultB = result-array[i-1];
printf("%d\n",result,resultB);
}
return 0;
}
现在我期待的是将添加示例中的数组的前 2 个元素,例如: 1+2=3;然后我想要这个结果 3 添加到数组 [2] 的第二个元素,即 3+2 = 5,然后 5+array[3] = 8 等等,直到数组结束的长度。我知道我做错了什么.我该如何解决这个问题?
何时
i == 0
然后array[i-1]
出界i == 9
然后array[i+1]
出界这些使您的程序具有未定义的行为。
此外,
printf("%d\n",result,resultB);
将 two int
放在堆栈上,但您只告诉 printf
使用一个。删除一个或添加一个%d
.
解决了这些问题:
#include <stdio.h>
#define SIZE(x) (sizeof (x) / sizeof *(x))
int main(void) {
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result = 0;
int resultB = 0;
for (int i = 1; i < SIZE(array) - 1; i++) {
// ^ ^^^
result = array[i] + array[i + 1];
resultB = result - array[i - 1];
printf("%d %d\n", result, resultB);
// ^^
}
}
算法将产生这个输出:
5 4
7 5
9 6
11 7
13 8
15 9
17 10
19 11
我在这里看到几个问题。
首先,
array[i+1]
会在i=9
时访问一个未定义的内存区域(由于array
的最大索引是9
,访问array[9+1]
显然是越界的)。
当
array[i-1]
时,i=0
也会发生同样的情况。
请记住,C中的数组是零基,并且第一个元素是
0
和最后一个在您的示例中是9
。
Another problem is with your
printf
, you're using a single %d
, but are trying to print two integer values.它应该是%d\t\%d\n
或类似的东西。
我会改写如下:
#include <stdio.h>
int main()
{
int array[] = {1,2,3,4,5,6,7,8,9,10};
int result = 0;
int resultB = 0;
for(int i = 1 ;i < 10; i++)
{
result = array[i]+array[i-1];
resultB = result+array[i];
printf("%d\t%d\n",result,resultB);
}
return 0;
}
本版代码输出结果如下:
3 5
5 8
7 11
9 14
11 17
13 20
15 23
17 26
19 29
#include <stdio.h>
int main()
{
int array[9] = {1,2,3,4,5,6,7,8,9,10};
int result = 0;
int resultB = 0;
for(int i = 0 ;i < 9; i++)
{
result = array[i]+array[i-1];
resultB = result+array[i];
printf("%d\t%d\n",result,resultB);
}
return 0;
}
输出:
1 2
3 5
5 8
7 11
9 14
11 17
13 20
15 23
17 26
然而,如您所见,它应该遍历数组的其他元素,但似乎直到结果 11,它按预期工作然后之后,它只将数组的第三个元素添加到结果中,而结果应该增加到第四个元素到第五个元素等等?为什么会这样,因为我还在测试它:
1+2 = 3, 3+2 = 5, 5+3 = 8, 8+3 = 11,
但它接下来应该做 11+4 = 15 但是,它做 11+3,然后将数组中的第三个元素 +3 到我没想到的所有其他结果?希望我说清楚并感谢你的时间。