2016-05-28 5 views
3

cプログラムが正しい合計を出力していません。私は毎回異なる数字を試してみましたが、各反復時に配列のインデックスの値を格納する変数を使って作業を試みました。 (すなわち、それはだCプログラムが正しい合計を出力していません

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

これはbと呼ばれる新しいローカルintを作成し、今a+iにあったものを含んでいます

 
Enter length of array: 3 
Enter 3 numbers1 
Enter 3 numbers2 
Enter 3 numbers3 
sum= 0 

答えて

5

はラインを考えてみましょう:

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

出力があることが判明しますこの時点で不明)。

あなたは、ユーザーが入力したものとそのローカル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; 
} 
+0

を...かscanf( "%i"、a + i); ' – alk

+0

ありがとうございます。それは私の問題をかなりうまく解決しました。 – user2896873

関連する問題