Полная реализация s21_sscanf — форматированный ввод из строки (Part 4).
int s21_sscanf(const char *str, const char *format, ...);
Возвращает количество успешно присвоенных аргументов, либо EOF при ошибке до первого присваивания.
suppress (*), width, length, specifierd, i, o, u, x, Xf, e, E, g, Gc, spn, %c, d, i, e, E, f, g, G, o, s, u, x, X, p, n, %* — подавление присваивания (поле читается, но не записывается, не учитывается в return)h, l, L%i — детектит основание автоматически (0x → hex, 0 → oct, иначе dec)%s — читает до whitespace, не включая%c — читает ровно width (по умолчанию 1) символов, без пропуска whitespace%n — сохраняет количество прочитанных байт, не считается в returnEOFСравнение со стандартным sscanf:
int a1, a2; double d1; char s1[64];
int r_my = s21_sscanf(input, fmt, &a1, &d1, s1);
int r_std = sscanf(input, fmt, &a2, &d2, s2);
ck_assert_int_eq(r_my, r_std);
// ...сравнить все значения
Не забыть про:
"abc" для %d)%*d посреди формата\n, \t%[...] НЕ требуется (не входит в задание), но проверь что не падает...
d, i, u, o, x)...
f, e, g)...
%c и %s...
%n, %p, %%...
*...
...