如何返回多个值并将它们存储在main()函数中?

时间:2014-05-02 20:45:40

标签: c function return-value

我想从函数中返回两个或多个值,并希望将这些值存储到main()函数中。我试图通过以下代码来做到这一点。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num1, num2, s, p;
    printf("Enter tow numbers: ");
    scanf("%d %d", &num1, &num2);
    p = function(num1, num2);
    s = function(num1, num2);
    printf("Sum is: %d\nProduct is: %d", p, s);
    return 0;
}

int function(int x, int y)
{
    int sum, product;
    sum = x+y;
    product = x*y;
    return product, sum;
}

如果我输入两个数字,请说5 2我想要的结果是:

Sum is: 7
Product is: 10

但我两个都得到7分。如何获得所需的输出?

2 个答案:

答案 0 :(得分:5)

C不允许您定义返回单个类型的多个类型或多个实例的函数。但是,您可以使用struct将类似或不同类型的变量捆绑到一个新的用户定义类型中。在这种情况下,您可以执行以下操作:

#include <stdio.h>
#include <stdlib.h>

typedef struct myStruct {
    int sum;
    int product;
} myStruct;

myStruct function(int x, int y) {
    myStruct val;
    val.sum = x+y;
    val.product = x*y;
    return val;
}

int main() {
    int num1, num2;
    myStruct result;
    printf("Enter tow numbers: ");
    scanf("%d %d", &num1, &num2);
    result = function(num1, num2);
    printf("Sum is: %d\nProduct is: %d", result.sum, result.product);
    return 0;
}

此外,虽然上面的程序在语法上是正确的,但函数返回中的,只会返回逗号分隔值集合中的最后一个值。通常,,不会与return一起使用;但是,在for循环中使用它时非常方便。

答案 1 :(得分:1)

另一种可能的解决方案是期望参数的乘积和和值,如下所示:

#include <stdio.h>
#include <stdlib.h>

void function(int x, int y, int *p, int *s);

int main()
{
    int num1, num2, s, p;
    printf("Enter tow numbers: ");
    scanf("%d %d", &num1, &num2);
    function(num1, num2, &p, &s);
    printf("Sum is: %d\nProduct is: %d", s, p);
    return 0;
}

void function(int x, int y, int *p, int *s)
{
    *s = x+y;
    *p = x*y;
}