[英]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;
}
或者,如果您不想處理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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.