因此我获得了一个枚举值列表。此函数将返回整数值。它接受一个枚举值,其余的后跟整数值。如果枚举类型被称为total并且返回总数,我应该得到以下整数值的总和。
答案 0 :(得分:1)
#include <stdio.h>
#include <stdarg.h>
typedef enum rule {
first, total
} Rule;
int fund(Rule rule, int v1, ...){
switch(rule){
case total:
{
int total = v1, value;
if(v1 == -1) return 0;
va_list ap;
va_start(ap, v1);
value = va_arg(ap, int);
while(value != -1){
total += value;
value = va_arg(ap, int);
}
va_end(ap);
return total;
}
break;
case first:
return v1;
}
return -1;
}
int main(void){
printf("first:%d\n", fund(first, 1, 2, 3, 4, -1));//first:1
printf("total:%d\n", fund(total, 7, 5, 3, 1, -1));//total:16
}
答案 1 :(得分:0)
您提到参数的结尾标有-1
。这意味着在获得-1
之前,您可以继续获取更多参数。
以下是使用va_list
-
if(rule == TYPE) {
int total = 0;
va_list args;
va_start(args, rule);
int j;
while(1){
j = va_arg(args, int);
if(j!=-1)
total += j;
else
break;
}
va_end(args);
return total;
}
您在评论中提到您的原型是
int choose(Rule rule, int v1, ...);
在这种情况下,您需要进行修改 -
在最顶端
if(v1 == -1)
return 0;
并且
int total = v1;
va_list args;
va_start(args, v1);
演示Here