Как мне сбросить указатель на начало ввода или файла командной строки. Например, моя функция читает строку из файла и распечатывает ее с помощью 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