首页 > 解决方案 > 如何从c中的单个函数返回具有不同数据类型的多个值

问题描述

我想从 input() 函数返回一个 char 变量和两个 int 变量到主函数,所以我该怎么做

char Input(char ctgry, int cls, int day)
{
    
    do
    {
        printf("Category (G-Government, N-Non government) : ");
        scanf("%c", &ctgry);

        if (ctgry != 'G' && ctgry != 'N')
            printf("Invalid\n");
    } while (ctgry != 'G' && ctgry != 'N');
    
    do
    {
        printf("Ward Class: ");
        scanf("%d", &cls);
        if (cls != 1 && cls != 2 && cls != 3)
            printf("Invalid\n");
    } while (cls != 1 && cls != 2 && cls != 3);
    
    printf("No. of days: ");
    scanf("%d", &day);

    return;
}

标签: cfunctionreturn-value

解决方案


在 C 中,您只能返回一个值。所以没有办法返回一个字符和两个整数。

但是,有一些解决方法。

您可以对结构中的变量进行分组并返回一个结构值。喜欢:

struct retVal
{
    char a;
    int b;
    int c;
}

struct retVal foo(...)
{
    struct retVal result;
    ...
    result.a = some_value;
    result.b = some_value;
    result.c = some_value;
    return result;
}

并称之为:

struct retVal values = foo(...);
printf("Values after function call %c %d %d\n", values.a, values.b, values.c); 

或者,您可以将指针传递给两个整数,然后直接在函数中更新它们。

喜欢:

char foo(int* i1, int* i2, ...)
{
    char result;
    ...
    result = some_value;
    *i1 = some_value;
    *i2 = some_value;
    return result;
}

并称之为:

int x;
int y;
char c = foo(&x, &y, ...);
printf("Values after function call %c %d %d\n", c, x, y); 

推荐阅读