簡體   English   中英

C程序沒有打印正確的總和

[英]C program is not printing correct sum

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

考慮一下這條線:

int b=*(a+i);  //used to store the value at that index. 

這會創建一個名為b的新本地int ,它現在包含a+i (即此時它未知)。

然后用用戶輸入的內容替換該local int

scanf("%i",&b);

但你永遠不會回去和更新a

我可能會建議:

int b;//used to store the value at that index. 
scanf("%i",&b);
*(a+i) = b;

例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM