使用2个函数

时间:2017-10-08 19:09:47

标签: c

刚刚学习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的函数运行第二个程序时,我得到了:

cmd image

我要么做一些明显错误的事情,要么根本不理解我在做什么。

4 个答案:

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