Сброс указателя на начало файла

Как мне сбросить указатель на начало ввода или файла командной строки. Например, моя функция читает строку из файла и распечатывает ее с помощью getchar ()

  while ((c = getchar ())! = EOF) {key [  я ++] = с;  if (c == ' n') {ключ [i-1] = ' 0' printf ("% s", ключ);  }}  

После запуска указатель указывает на EOF, я предполагаю? Как мне заставить его снова указывать на начало файла/или даже перечитать входной файл

Я ввожу его как (./function


Если у вас есть FILE * , отличный от stdin , вы можете использовать:

  rewind (fptr);  

или

  fseek (fptr, 0, SEEK_SET);   

, чтобы сбросить указатель на начало файла.

Вы не можете сделать это для stdin .

Если вам нужно иметь возможность сбросить указатель, передайте файл в качестве аргумента программе и используйте fopen , чтобы открыть файл и прочитать его содержимое.

  int main (int argc, char ** argv) {int c;  ФАЙЛ * fptr;  if (argc  

Конвейерный/перенаправленный ввод не работает так. Возможны следующие варианты:

  • Прочитать ввод во внутренний буфер (что вы, кажется, уже делаете); или
  • Вместо этого передайте имя файла в качестве аргумента командной строки и делайте с ним как хотите.


Как вернуться к началу файла после достижения .eof () в C ++?

Я просто пробовал это, но не работает, может быть, потому что я читаю символ за символом?

  char character; while (! file.eof ()) {character = file.  получать();  cout  

Вы пробовали принятый ответ? Вызов clear является ключевым.

0


ОК , оно работает. Уловка заключается в вызове

  file.clear (); file.seekg (0, ios :: Beg);  

просто после итерации. Извините 🙁


Если ваш ввод является потоком (данные поступают из другой программы), вы не будете иметь возможность искать.

1

Оцените статью
clickpad.ru
Добавить комментарий