繁体   English   中英

我需要在 C 中使用用户输入来制作可变参数 function

[英]I need to make a variadic function with user input in C

我需要从结构中对数组int kviz[10]求和。 该数组有 10 个整数元素,结构是一个数组,它本身是[120] 我需要让用户选择他想要求和的元素数量(例如:来自int kviz[10]的第一个、第二个和第五个 integer),并且需要对整个结构 [120] 进行求和。 需要使用可变参数 function 来完成。 function 需要返回整个结构的数组总和,因为我需要稍后根据结果对结构进行排序。

结构体:

typedef struct studenti
{
    char index[10];
    char ime[20];
    char prezime[20];
    int kviz[10];
} studenti[120];

我的尝试:

int sumaK(studenti student,*redniBrojKviza, int *brojKviza,...)
{
    int suma;

    va_list argumenti;

    argumenti = redniBrojKviza;

    for(int i=0;  ;i++)
    {
    argumenti = student.kviz[i];
    }

    va_start (argumenti, brojKviza);

    for(int x = 0; x < brojKviza; x++ )
    {
        suma += va_arg (argumenti, brojKviza);
    }

    va_end (argumenti);

return suma;
}

主要 function - 这是我需要让用户输入值的地方:

printf("Unesite broj kvizova: %d", brojKvizova);
scanf("%d", &brojKvizova);

for(int s=0;s<brojKvizova;s++)
{

    printf("Unesite redni broj kviza: ");
    scanf("%d", &redniBrojKviza);

}

sumaK(brojKvizova,redniBrojKviza); 

可变参数函数提供对相同 function 的不同调用,指定不同类型的不同数量的 arguments 和/或 arguments:

// The same foo() in all cases:
foo(1, 2, 3);
foo(1, 2);
foo(42, "!");

这不是你想要做的。

您似乎希望处理相同的 function 调用表达式,就好像它在不同情况下指定了不同数量的 arguments 一样,但 C 对此没有任何规定。 您始终可以通过单独查看调用表达式来计算 function 调用表达式中 arguments 的数量——参数计数不会随 arguments 的值而变化。

因此,可变参数不适合您的用例。 对于所描述的问题,您可以使用多种替代方法,所有这些方法都涉及通过固定数量的 arguments 传递所有用户的运行时列选择。 例如,假设只有十列可供选择,您可以将选择编码为单个int 或者您可以将它们放在一个数组中,然后传递它加上一个元素计数。 原则上,您甚至可以为每列声明一个单独的_Bool参数,但这很难用于您的目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM