Если вы точно знаете, что входной файл будет в правильно сформированном, очень специфическом формате, fscanf()
всегда является опцией и сделает большую работу за вас.Ниже я использую sscanf()
вместо того, чтобы просто иллюстрировать, не создавая файл.Вы можете изменить вызов для использования fscanf()
для вашего файла.
#define MAXSIZE 32
const char *line = "Add id:324 name:\"john\" name2:\"doe\" num1:2009 num2:5 num3:20";
char op[MAXSIZE], name[MAXSIZE], name2[MAXSIZE];
int id, num1, num2, num3;
int count =
sscanf(line,
"%s "
"id:%d "
"name:\"%[^\"]\" " /* use "name:%s" if you want the quotes */
"name2:\"%[^\"]\" "
"num1:%d "
"num2:%d "
"num3:%d ", /* typo? */
op, &id, name, name2, &num1, &num2, &num3);
if (count == 7)
printf("%s %d %s %s %d %d %d\n", op, id, name, name2, num1, num2, num3);
else
printf("error scanning line\n");
Выходы:
Добавить 324 Джон Доу 2009 5 20
В противном случае я бы вручную анализировал входные данные, считывая символ за раз, или выбрасывал их в буфер, если по какой-либо причине использование fgets()
было запрещено.Иметь его в буфере всегда проще, чем не ИМХО.Тогда вы могли бы использовать другие функции, такие как strtok()
и еще много чего, чтобы выполнить анализ.