【问题标题】:I need to make a variadic function with user input in C我需要用 C 中的用户输入创建一个可变参数函数
【发布时间】:2022-01-14 16:00:07
【问题描述】:

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

结构:

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;
}

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

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); 

【问题讨论】:

  • 你不能。你需要使用一个数组。
  • 为什么将 brojKviza 声明为指针?如果它是一个指针,你需要取消引用它:x &lt; *brojKviza
  • 对函数的调用需要至少有 3 个参数。可变参数在这些之后。

标签: c function input struct variadic


【解决方案1】:

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

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

这不是你想要做的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2020-10-02
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多