如果第一个参数只是指示和枚举值,如何找出参数的数量(使用变量参数)?

时间:2017-07-26 03:43:41

标签: c

因此我获得了一个枚举值列表。此函数将返回整数值。它接受一个枚举值,其余的后跟整数值。如果枚举类型被称为total并且返回总数,我应该得到以下整数值的总和。

2 个答案:

答案 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