我的程序打印0而不是预期的数字

时间:2016-01-02 17:16:45

标签: c

所以我创建了一个函数,它返回一个值,该值是用户给出的2个数字的连接(总和)。但每次我输入这两个数字时,结果总是为0。

float connection(int num1, int num2, float result)
{
    result= num1 + num2;
    return (result);
}

int main()
{
  int num1= 0;
  int num2= 0;
  float result= 0.0;

  printf("\nChoose the first number you'd like to connect: ");
  scanf("%d", &num1);
  getchar();
  printf("choose the second number you'd like to connect: ");
  scanf("%d", &num2);
  connection(num1, num2, result);
  printf("The result is: %f", result);
}

4 个答案:

答案 0 :(得分:5)

这里的问题是(我相信)你希望传递给函数的参数result改变值。这不是C的工作原理,而是所有参数都是通过值传递,而被调用函数中的变量result是一个局部变量,它与result变量没有任何关联。调用功能。更改一个变量不会影响另一个变量。

而是使用函数返回的值:

result = connection(num1, num2, result);

当然,这意味着传递result作为参数完全没有意义,你甚至不需要它在函数中:

int connection(int num1, int num2)
{
    return num1 + num2;
}

另请注意,我更改了返回类型,因为添加两个整数永远不会产生浮点数。

在旁注上修改参数意味着你必须通过引用传递它,C不支持它。它可以模拟但是,通过使用指针:

void connection(int num1, int num2, int *result)
{
    *result = num1 + num2;
}

然后将其称为

int result;
connection(num1, num2, &result);

答案 1 :(得分:3)

您正在混淆两种可能性:返回值并通过将变量作为参考传递给方法来更改变量。

这是返回值的方法(在这种情况下,您不需要result参数):

float connection(int num1, int num2)
{
    float result= num1 + num2;
    return result;
}

...

result = connection(num1, num2);

这是如何将变量作为引用传递(在这种情况下,您不需要返回值):

void connection(int num1, int num2, float *result)
{
    *result= num1 + num2;
}

...

connection(num1, num2, &result);

答案 2 :(得分:0)

我想忘了将结果分配回变量:

connection(num1, num2, result); // returned value is missed

result = connection(num1, num2, result); // returned value saved

相反,如果您希望函数修改变量,则按值传递C,因此需要一些指针:

void connection(int num1, int num2, float *result)
{
    *result = num1 + num2;
}

connection(num1, num2, &result);

答案 3 :(得分:0)

只需将您的函数调用通过引用传递

#include<stdio.h>

float connection(int *num1, int *num2, float *result)
{
    *result= *num1 + *num2;
    return (*result);
}

int main()
{
  int num1= 0;
  int num2= 0;
  float result= 0.0;

  printf("\nChoose the first number you'd like to connect: ");
  scanf("%d", &num1);
  getchar();
  printf("choose the second number you'd like to connect: ");
  scanf("%d", &num2);
  connection(&num1, &num2, &result); //Function Called by reference 
  printf("The result is: %f", result);
}

有关函数调用的更多详细信息Read It