Как использовать fscanf с самого начала каждый раз, когда я нахожусь в цикле for / while? - PullRequest
0 голосов
/ 29 января 2019

Как использовать fscanf с самого начала каждый раз, когда я нахожусь в цикле for?

Я хочу сделать что-то вроде этого:

 for(i=0; i<5; i++)
      while(fscanf(in, "%d", &number)
            .......

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

1 Ответ

0 голосов
/ 29 января 2019

Используйте rewind(), чтобы вернуться к началу файла:

for (i = 0; i < 5; i++) {
    rewind(in);
    while (fscanf(in, "%d", &number)
        .......

Обратите внимание, что это решение работает только в том случае, если поток доступен для поиска.Если он связан с обычным файлом, либо открытым fopen, либо перенаправлением оболочки, он должен быть доступен для поиска, но если он связан с терминалом, каналом или каким-либо другим символьным устройством, rewind() может дать сбой.Вы не можете проверить это с помощью rewind(), но есть альтернатива:

if (fseek(in, 0L, SEEK_SET)) {
    fprintf(stderr, "cannot rewind inut stream\n");
    exit(1);
}

Более надежный подход заключается в сохранении значений, считанных fscanf(), чтобы избежать поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...