2015-09-03 14 views
5

W jaki sposób można zresetować wskaźnik do początku wiersza polecenia lub pliku. Na przykład moja funkcja czyta w linii z pliku i drukuje ją przy użyciu getchar()Resetowanie wskaźnika do początku pliku

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

Po uruchomieniu tego wskaźnika wskazuje na EOF im zakładając? Jak dostanę to, aby wskazać początek pliku ponownie/lub nawet ponownie odczytać plik wejściowy

im wprowadzając go jako (./function < inputs.txt)

+0

prostu zamknąć i ponownie otworzyć plik – asdf

+0

'' EOF powinny być przez 'stdin' więc co ty próbujesz zresetować .. Jeśli były coraz wejście z pliku następnie' tyłu (fp) 'będzie pracował – Gopi

Odpowiedz

12

Jeśli masz FILE* inny niż stdin, można użyć:

rewind(fptr); 

lub

fseek(fptr, 0, SEEK_SET); 

zresetować wskaźnik na początku pliku.

Nie można tego zrobić dla stdin.

Jeśli chcesz mieć możliwość zresetowania wskaźnika, przekaż plik jako argument do programu i użyj pliku fopen, aby otworzyć plik i przeczytać jego zawartość.

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; 
} 
3

Piped/przekierowany wejściowy nie tak to działa. Dostępne są następujące opcje:

• Odczytaj dane wejściowe do wewnętrznego bufora (który już wydajesz, że robisz); lub

• Przekaż nazwę pliku jako argument wiersza polecenia i wykonaj to, jak chcesz.

Powiązane problemy