• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Приглашаем на KubanCTF

    Старт соревнований 14 сентября в 10:00 по москве

    Ссылка на регистрацию в соревнованиях Kuban CTF: kubanctf.ru

    Кодебай является технологическим партнером мероприятия

Аналог функции Fscanf (c++)

  • Автор темы kan141290
  • Дата начала
K

kan141290

Здравствуйте.
По заданию нужно написать аналог функции fscanf на языке C++. Каким способом это можно реализовать: построчное чтение с помощью fgets с разбором строки, посимвольное чтение с помощью fread или есть какой-нибудь более простой способ?
Полного решения я не требую, хотелось бы понять как это лучше сделать.
Заранее спасибо.
 
L

lazybiz

Это не так просто сделать. Вот простой пример, взятый с
C++:
#include "stddef.h"
#include "stdarg.h"
#include "stdlib.h"

extern FILE *Stderr;


int MyScanf(char *s, const char *fmt, ...)
{
char *s0;
va_list ap;
long L, *Lp;
int i, *ip, rc = 0;
va_start(ap, fmt);
for(;; ) {
for(;;) {
switch(i = *(unsigned char *)fmt++) {
case 0:
goto done;
case '%':
break;
default:
if (i <= ' ') {
while(*s <= ' ')
if (!*s++)
return rc;
}
else if (*s++ != i)
return rc;
continue;
}
break;
}
switch(*fmt++) {
case 'l':
if (*fmt != 'd')
bad(fmt);
fmt++;
Lp = va_arg(ap, long*);
L = strtol(s0 = s, &s, 10);
if (s > s0) {
rc++;
*Lp = L;
continue;
}
return rc;
case 'd':
ip = va_arg(ap, int*);
L = strtol(s0 = s, &s, 10);
if (s > s0) {
rc++;
*ip = (int)L;
continue;
}
return rc;
default:
bad(fmt);
}
}
done:
return rc;
}
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!