[英]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.