Я хочу написать функцию с неизвестными целочисленными членами и печатать только неотрицательные из них.Точнее, это примеры моих фраворитных выводов:
print_nonnegatives(1, 3, -4, 5, 6) = 1, 3, 5, 6
print_nonnegatives(-1) =
print_nonnegatives(7, -1, -4, 9) = 7, 9
Итак, моя первая попытка:
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
#define BIG_INT 100
void print_nonnegatives(int arg1, ...)
{
va_list ap;
va_start(ap, arg1);
for (int i = arg1; -BIG_INT < i && i < BIG_INT; i = va_arg(ap, int))
{
if (i >= 0)
{
printf("%d ", i);
}
}
va_end(ap);
puts("\n");
}
int main()
{
print_nonnegatives(1, 3, -4, 5, 6);
print_nonnegatives(-1);
print_nonnegatives(7, -1, -1, 9);
}
Это работает;но есть несколько грязных линий.Например, если один из аргументов больше, чем BIG_INT, он будет потерян.Я пытался изменить условие -BIG_INT #include <stdio.h>
#include <stdarg.h>
#include <math.h>
#define BIG_INT 100
void print_nonnegatives(int arg1, ...)
{
va_list ap;
va_start(ap, arg1);
for (int i = arg1; i / i == 1; i = va_arg(ap, int))
{
if (i >= 0)
{
printf("%d ", i);
}
}
va_end(ap);
puts("\n");
}
int main()
{
print_nonnegatives(1, 3, -4, 5, 6);
//print_nonnegatives(-1);
//print_nonnegatives(7, -1, -1, 9);
}
Примечательным фактом является то, что я компилирую с gcc в Linux.