c程序未打印正确的总和。我每次都尝试不同的数字,甚至尝试使用变量来在每次迭代时将索引的值存储在数组中。
#include <stdio.h>
#include <malloc.h>
//find sum using pointers
int find_sum(int *a,int n) {
int sum=0;
int i;
for (i=0; i<n; i++){
sum=sum + *(a+i);
}
printf("sum= %i",sum);
}
int main(){
int n;
printf("Enter length of array: ");
scanf("%i",&n);
int *a=(int *)malloc(n*sizeof(int));
int i;
for (i=0; i<n; i++){
printf("Enter %i numbers",n);
int b=*(a+i);//used to store the value at that index.
scanf("%i",&b);
}
find_sum(a,n);
return 0;
}
输出结果是:
Enter length of array: 3 Enter 3 numbers1 Enter 3 numbers2 Enter 3 numbers3 sum= 0
答案 0 :(得分:5)
考虑一下:
int b=*(a+i); //used to store the value at that index.
这会创建一个名为int
的新本地b
,现在包含a+i
处的内容(此时此处未知)。
然后用用户输入的内容替换本地int
:
scanf("%i",&b);
但你永远不会回去更新a
。
我可能会建议:
int b;//used to store the value at that index.
scanf("%i",&b);
*(a+i) = b;
E.g。
int main() {
int n;
printf("Enter length of array: ");
scanf("%i",&n);
int *a=(int *)malloc(n*sizeof(int));
int i;
for (i=0; i<n; i++) {
printf("Enter number %i: ",n);
int b;
scanf("%i", &b);
*(a+i) = b;
}
find_sum(a, n);
free(a); // if you malloc, don't forget to `free`
return 0;
}
或者,如果您不想处理malloc
和free
(这很容易引入内存错误),您只需使用数组:
int main() {
int n;
printf("Enter length of array: ");
scanf("%i", &n);
int a[n];
int i;
for (i=0; i<n; i++) {
printf("Enter number %i: ", n);
scanf("%i", &a[i]);
}
find_sum(a, n);
return 0;
}