将scanf条目传递给stdarg函数

时间:2017-09-15 18:32:57

标签: c variadic-functions

我尝试使用vararg函数执行一个能够计算n个数的平均值的程序

average(int numberOfValues, ...);

条目是获取平均值的值的数量和值本身(...)。

问题是:我可以制定例程来从scanf获取这些值吗?我想构建一个numberOfValues大小的数组然后调用vararg函数,但是我不能为一个函数传递一个数组(至少没有指针)。我不在乎答案吗?我还想过将numberOfValues和值作为主函数参数传递(至少用于测试)来解决这个问题。

1 个答案:

答案 0 :(得分:2)

你当然可以做类似

的事情
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
average(3, a, b, c);

或者

int a[3];
scanf("%d%d%d", &a[0], &a[1], &a[2]);
average(3, a[0], a[1], a[2]);

但是如果你不知道(直到用户输入它们)会有多少个值,那么是的,你可能想把它们存储在一个数组中,但不是,用于计算平均值的varargs函数是不会有用。

varargs函数的限制(至少是常规函数)是在编译时必须始终知道参数的数量(对于特定的调用)。

所以,相反,你可能想写

average(int numberOfValues, int theValues[])
{
    /* ... */
}

将值作为数组传递,而不是作为变量参数列表传递。这可能更容易编写,更普遍有用。