C程序没有打印正确的总和

时间:2016-05-28 06:01:17

标签: c

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

1 个答案:

答案 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;
}

或者,如果您不想处理mallocfree(这很容易引入内存错误),您只需使用数组:

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;
}