我在这里张贴这个是因为我无法理解为什么在运行这个简单但错误的程序时总和等于零。这类问题与地址有关吗?
#include <iostream>
using namespace std;
void upis(int n, int m, int pp[]) {
do {
cin >> n >> m;
} while(n > 20 || n < m);
for(int i = 1; i <= n; i++) {
do {
cin >> pp[i];
} while(0 > pp[i] || pp[i] > 1000000);
}
}
int suma(int n, int pp[]) {
int sum = 0;
for(int i=1; i<=n; i++) {
sum += pp[i];
}
return sum;
}
int main() {
int n, m, pp[n];
upis(n, m, pp);
cout << suma(n, pp);
return 0;
}
答案 0 :(得分:1)
您的代码中有两个错误:
int n,m,pp[n];
声明一个可变长度数组(在C ++中本身是非标准的)并使用未初始化变量的值作为其长度。这是未定义的行为,1
索引数组,而索引从零开始。由于您将数组中的项数限制为20,这应该可以解决第一个问题:
int n, m, pp[20];
第二个问题应该通过更改for
循环来解决,如下所示:
for (int i=0 ; i < n ; i++) {
...
}