你好,我想输出每一个偶数的正数元素。我使用VA_LIST。编译器只计算从1到4的数字,4到8不计算在内,有什么问题吗?
#include <stdio.h>
#include <stdarg.h>
int MyPerfectF(int num, ...) {
int sum = 0;
va_list args;
va_start(args, num);
int x;
while (va_arg(args, int) != NULL) {
x = va_arg(args, int);
if (x > 0 && x % 2 == 0) {
printf("%d ", x);
sum++;
}
}
printf("\nAmount of true numbers is: %d", sum);
va_end(args);
return 0;
}
int main(void) {
int num = 5;
int a, b, c, d;
scanf_s("%d %d %d %d", &a, &b, &c, &d);
MyPerfectF(num, a, b, c, d, NULL);
}
1条答案
按热度按时间q8l4jmvw1#
从va_arg[强调我的]:
(1)将数据库中的数据保存到数据库中;
va_arg宏扩展为类型T的表达式,该表达式对应于va_list ap中的next参数。
在
MyPerfectF()
函数中,va_arg
被调用两次,因此如果输入在偶数位置包含偶数,则所有这些偶数都将被计数,否则它们不被计数。除此之外,您的代码中还有一个问题-在您的程序上下文中,类型T是
int
。编译器必须在while
循环条件的比较语句(va_arg(args, int) != NULL)
上抛出警告。你不需要传递
NULL
来指示参数的终止,而是将num
的值作为变量参数的数目传递给MyPerfectF()
函数,如下所示:在
MyPerfectF()
中,将while
循环替换为同样,你可以将
scanf()
的返回值赋给num
,并将其传递给MyPerfectF()
函数,这将确保MyPerfectF()
函数只读取那些被scanf()
成功读取并赋值的参数。