Как я могу заставить fscanf перечитать строку после выполнения условия? - PullRequest
0 голосов
/ 29 апреля 2010

while (fscanf (файл трассировки, "% s", код операции)! = EOF) {бла}

Иногда мне нужно заставить fscanf перечитать строку при выполнении определенного условия в моем коде. Это возможно; как бы я это сделал?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 апреля 2010

Я почти никогда не использую fscanf напрямую, так как очень сложно знать, где находится указатель файла в случае ошибки.

Я использую fgets, чтобы вставить одну строку, затем я могу использовать sscanf, как душе угодно, не возвращаясь к файлу для повторного чтения.

0 голосов
/ 29 апреля 2010

Если ваш входной файл доступен для поиска (а не, например, канал или сетевой поток), вы можете сделать что-то вроде:

fgetpos(tracefile, &position_before);
fscanf( tracefile, "%s ", opcode );
if (need_to_rescan) { fsetpos(tracefile, position_before); }

Резервное копирование и повторное сканирование могут быть довольно неэффективными (так же как и проблемы не поддержки ввода из канала и т. Д.), Поэтому вы можете подумать, есть ли альтернатива.

...