刚刚学习C,我试图理解如何使用2个函数得到数字的总和,但结果不正确。
我正在尝试向用户询问10个数字,这些数字存储在函数main中的数组中。然后在单独的函数中计算总和,然后在main中显示。
这是我没有多个功能的原始代码:
int main()
{
int n[10];
int index;
int sum_n = 0;
int largest_n;
int smallest_n;
int *p;
p = &n[10];
int a;
printf("Enter 10 Integers\n");
for (index = 0; index < 10; index ++){
scanf("%d", &n[index] );
sum_n += n[index];
}
printf("The Sum of numbers is %d\n", sum_n);
}
这是我试图将其转换为函数,但总和没有用完:
int calculations (int);
int main()
{
int n[10];
int index;
int largest_n;
int smallest_n;
int *p;
p = &n[10];
int a;
printf("Enter 10 Integers\n");
for (index = 0; index < 10; index ++){
scanf("%d", &n[index] );
}
if (n[index] = 10){
//sum_n += n[index];
printf("The Sum of numbers is %d\n",calculations(n[index]));
}
&安培;
int calculations (int num){
int sum_n = 0;
sum_n += num;
return sum_n;
}
当我使用数字1到10的函数运行第二个程序时,我得到了:
我要么做一些明显错误的事情,要么根本不理解我在做什么。
答案 0 :(得分:4)
每次调用函数时,函数中声明的变量都会被重置。 如果您想要一个每次调用函数时都不会重置的变量,您只需将其设置为静态。
此外你传递的是参数n [10],但是你的数组存储了从n [0]到n [9]的数字。如果你想要所有十个数字的总和,那么你必须为每个数字调用计算函数,否则你可以传递整个数组。这里是修改后的代码。
#include<stdio.h>
int calculations (int);
int main()
{
int n[10];
int index;
int largest_n;
int smallest_n;
int *p;
p = &n[10];
int a;
int ans=0;
printf("Enter 10 Integers\n");
for (index = 0; index < 10; index ++){
scanf("%d",&n[index]);
ans = calculations(n[index]);
}
printf("The Sum of numbers is %d\n",ans);
}
int calculations (int num){
static int sum_n;
sum_n += num;
return sum_n;
}
答案 1 :(得分:3)
首先,您在此代码中不需要array
sum
,其他人始终记得检查 scanf
返回的内容。代码是非常简单。
第一部分main
int main()
{
int n;
int sum=0;
printf("Enter 10 Integers\n");
for (int index = 0; index < 10; index ++){
if(scanf("%d", &n))
sum+=n;
}
printf("The Sum of numbers is %d\n",sum);//calculations(n));
}
第二次使用函数calculation
int sum=0;
void calculation(int num){
sum+= num;
}
int main()
{
int n;
printf("Enter 10 Integers\n");
for (int index = 0; index < 10; index ++){
if(scanf("%d", &n))
calculation(n);
}
printf("The Sum of numbers is %d\n",sum);//calculations(n));
}
答案 2 :(得分:1)
您的函数calculations()
只返回其参数(0 + num
只是num
)。
声明
int sum_n = 0;
每次调用它时,都会将sum_n
重置为0
。
将此语句移出 - 直接进入main()
函数(并在调用calculations()
之前)。
答案 3 :(得分:1)
以下评论中提到的更正。
int calculations (int *num){ //Should be a pointer or array eg. int num[] as you want to pass an array to this function
int sum_n = 0;
int i;
//Create loop here to iterate over array and sum elements
for(i=0; i<sizeof(num)/sizeof(int); i++)
sum_n+=num[i];
return sum_n;
}
并且
if (n[index] = 10){ //This is logically incorrect. This should be if(index==10).
// n[index]=10 will assign 10 to a[10] and if will still pass as if(10) is true but make a note of it. Don't use assignment operator inside if, you need comparison operator `==`
printf("The Sum of numbers is %d\n",calculations(n[index])); //You should call calculations like this -> calculations(n). You should pass whole array not just an element.
}