Задачка на функция с переменным числом разнотипных параметров
Добрый день товарищи форумчане!))
Задание: "Разработать функцию с переменным количеством параметров, которая для каждого своего числового параметра, задающего порядковый номер дня года, определяет и выводит на экран соответствующую дату: <День> < Наименование месяца>, например: 47 день – 16 февраля. Параметрами функции (возможно, кроме первого) являются числа, задающие номера дней в текущем году. Для каждого из дней нужно указать соответствующую дату или указать ошибку (целесообразно воспользоваться вспомогательной функцией для формирования дат). Результат выводится в форме таблицы."
Нужно было сделать 2 варианта программы. В первом все параметры одного типа, а в другом разнотипные. Первый вариант работает просто чудесно, но со вторым беда. Подскажите что исправить или переделать в коде.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdarg.h>
void put_data(int);
void get_data(const char* types, ...);
int main(void) {
// вызываем функцию
printf(" -------------\n");
get_data("%d", 47, 116, 200, 89, 26); // с 5'ю аргументами
return 0;
}
// -------------------------------------------------------------
void get_data(const char* types, ...) {
double d_numb;
int i_numb;
long l_numb;
va_list day;
va_start(day, types);
for (const char* ptr = types; *ptr; ptr++) {
if (*ptr != '%')
{
printf("%c", *ptr);
continue;
}
switch (*++ptr) {
case 'i':
for (int i = 0; i < *ptr; i++) {
i_numb = va_arg(day, int);
put_data(i_numb);
}
break;
case 'd':
for (int i = 0; i < *ptr; i++) {
d_numb = va_arg(day, double);
put_data(d_numb);
}
break;
case 'l':
for (int i = 0; i < *ptr; i++) {
l_numb = va_arg(day, long);
put_data(l_numb);
}
break;
}
}
va_end(day);
}
// -------------------------------------------------------------
void put_data(int day) {
int max_day = 365;
if (day < 1 || day > max_day) {
puts("Wrong day number");
return;
}
int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
char months[12][4] = { "jan", "feb", "mar", "apr", "may", "jun",
"jul", "aug", "sep", "oct", "nov", "dec" };
int month = 0, s = 0;
while (s + days[month] < day)
s += days[month++];
int d = day - s;
printf(" |date: %02d %s |\n", d, months[month]);
printf(" -------------\n");
}
// ------------------------------------------------------------