您好,我想輸出每個偶數的正元素。我使用 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);
}
uj5u.com熱心網友回復:
來自va_arg [強調我的]:
T va_arg( va_list ap, T );
va_arg 宏擴展為型別 T的運算式,對應于 va_list ap 的下一個引數。
在MyPerfectF()功能上,
while (va_arg(args, int) != NULL) {
x = va_arg(args, int);
va_arg被呼叫兩次,所以如果輸入在偶數位置包含偶數,那么所有這些偶數都將被計算在內,否則它們不會被計算在內。
除此之外,您的代碼中還有一個問題 - 在您的程式背景關系中,型別 T是int. (va_arg(args, int) != NULL)編譯器必須對while回圈條件的比較陳述句發出警告。
您不需要通過NULL來指示引數的終止。相反,將傳遞給函式num的變數引數的值傳遞給MyPerfectF()函式,如下所示:
int main(void) {
int num = 4;
.....
.....
MyPerfectF(num, a, b, c, d);
}
并以此MyPerfectF()替換while回圈
for (int i = 0; i < num; i) {
此外,您可以將 to 的回傳值賦值scanf()并將num其傳遞給MyPerfectF()函式,這將確保該MyPerfectF()函式將只讀取那些成功讀取并賦值的引數scanf()。把這些放在一起:
#include <stdio.h>
#include <stdarg.h>
int MyPerfectF(int num, ...) {
int sum = 0;
va_list args;
va_start(args, num);
for (int i = 0; i < num; i) {
int x = va_arg(args, int);
if (x > 0 && x % 2 == 0) {
printf("%d ", x);
sum ;
}
}
va_end(args);
printf("\nAmount of true numbers is: %d\n", sum);
return 0;
}
int main(void) {
int a, b, c, d;
printf ("Enter 4 values:\n");
int num = scanf("%d %d %d %d", &a, &b, &c, &d);
MyPerfectF(num, a, b, c, d);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/536614.html
標籤:C功能可变函数
