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

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

while((c=getchar())!=EOF)
 {
 key[i++]=c;
 if(c == '\n' )
 {
 key[i-1] = '\0'
 printf("%s",key);
 } 
 }

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

im вводит его как (./function < inputs.txt)

2 ответа

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

rewind(fptr);

или

fseek(fptr, 0, SEEK_SET);

to reset указатель на начало файла.

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

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

int main(int argc, char** argv)
{
 int c;
 FILE* fptr;
 if ( argc < 2 )
 {
 fprintf(stderr, "Usage: program filename\n");
 return EXIT_FAILURE;
 }
 fptr = fopen(argv[1], "r");
 if ( fptr == NULL )
 {
 fprintf(stderr, "Unable to open file %s\n", argv[1]);
 return EXIT_FAILURE;
 }
 while((c=fgetc(fptr))!=EOF)
 {
 // Process the input
 // ....
 }
 // Move the file pointer to the start.
 fseek(fptr, 0, SEEK_SET);
 // Read the contents of the file again.
 // ...
 fclose(fptr);
 return EXIT_SUCCESS;
}


Входящий/перенаправленный вход не работает. Ваши варианты:

• Прочитайте ввод во внутренний буфер (который вы, похоже, делаете); или

• Вместо этого передайте имя файла в качестве аргумента командной строки и сделайте это как угодно.

licensed under cc by-sa 3.0 with attribution.