2017-06-21 97 views
-2

我碰到一个问题,即传来传递的参数变量数量的函数C. 问题是这样:C中可变数量的参数?

编写一个函数,采用可变数量的代表在英语 学生痕迹的参数和返回得分超过90分的学生人数。 例如:variableArguments(3,20,90,98)返回1.一个值(98)大于90.

第一个参数是学生标记的数字(arg_count),后跟“arg_count”个参数。 例如:如果函数的第一个参数是5,函数的参数总数将是6(1 + 5)。

#include<stdarg.h> 
..... 
..... 
int variableArguments(int arg_count, ...){ 
//TODO 
    ..... 
    ..... 
    return 0; 
} 

例如:int result=variableArguments(4,87,90,98,67);

number of arguments =4 
arguments=(87,90,98,67)  

结果值应为“1”,因为数量的参数> 90是一个

在功能的第一个参数的原型是arg_count中剩余的参数是代表为...那可能是什么意思...

这里在这个函数中给出arg_count给出传递的参数的数量,我们需要在调用时传递给函数。 如果这样的参数被传递给函数,如何访问函数定义中的参数列表?

+3

[This variadic function reference](http://en.cppreference.com/w/c/variadic)可能会有帮助。 –

+1

@ Jean-FrançoisFabre不是一个有效的笨蛋。那是关于将参数传递给另一个函数的。 – user694733

+0

@ user694733同意。但毕竟是重复的。感谢您的纠正。 –

回答

0
int ff(int num, ...) 
{ 
    va_list arguments; 
    int sum = 0; 
    va_start(arguments, num); 
    for (int x = 0; x < num; x++) 
    { 
    sum += va_arg(arguments, int); 
    } 
    va_end(arguments); 

return sum; 
} 

//call 
printf("%d\n", ff(3, 1, 2, 3)); 

va_list的包含在...参数列表,在循环中,您通过一个在va_arg(参数,INT)可以访问一个;

+2

请避免给代码唯一的答案,而不是解释解决方案。 'cout'是C++构造,这是C的问题。 – user694733

-4
void f(int count_arg, int *arg) 
{ 
    for (int i = 0; i < count_arg; i++) 
     cout << arg[i] << endl; 
} 

//call 
int a[] = { 1,2,3,4,5 }; 
f(5, a); 
+0

这不是一个*变量参数*函数。这是一个函数,它精确地*两个参数。 –

+0

这个问题特别要求var args!并且也被标记为C而不是C++。 –

+0

另外,这是C++而不是C – Gam

0

你可以这样写,这个程序将返回接受变量no的函数的最大值。的参数:

#include <stdarg.h> 
#include <stdio.h> 

int max(int arg_count, ...) 
{ 
    int i; 
    int max, a; 

    va_list ap; 
    va_start(ap, arg_count); 

    max = va_arg(ap, int); 

    for(i = 2; i <= arg_count; i++) { 
    if((a = va_arg(ap, int)) > max) 
     max = a; 
    } 

    va_end(ap); 
    return max; 
} 

int main() 
{ 
    int count = 5; 


    printf("Max value is %d", max(count, 12, 67, 6, 7, 100)); 
    return 0; 
}