2015-09-03 5 views
5

Come sarebbe possibile ripristinare un puntatore all'inizio di un input o file della riga di comando. Per esempio la mia funzione è la lettura in una linea da un file e lo stampa utilizzando getchar()Ripristino del puntatore all'inizio del file

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

Dopo aver eseguito questo, il puntatore punta a EOF im assumendo? Come potrei farlo per puntare di nuovo al punto di partenza del file/o anche ri leggere il file di input

im digitando le (./function < inputs.txt)

+0

Basta chiudere e riaprire il file – asdf

+0

'' EOF dovrebbe avvenire attraverso 'stdin' così che cosa stai cercando di ripristinare .. Se si stavano diventando input da file, quindi' rewind (fp) 'avrebbe funzionato – Gopi

risposta

12

Se si dispone di un FILE* diverso stdin, è possibile utilizzare:

rewind(fptr); 

o

fseek(fptr, 0, SEEK_SET); 

per ripristinare il puntatore all'inizio del file.

Non è possibile farlo per stdin.

Se è necessario essere in grado di reimpostare il puntatore, passare il file come argomento al programma e utilizzare fopen per aprire il file e leggerne il contenuto.

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

di sottofondo/reindirizzato ingresso non lo fa lavorare così Le opzioni disponibili sono:

• Leggere l'input in un buffer interno (che sembra già fare); oppure

• Passare invece il nome del file come argomento della riga di comando e utilizzarlo come si desidera.