web-dev-qa-db-fra.com

Réinitialisation du pointeur au début du fichier

Comment pourrais-je réinitialiser un pointeur au début d'une entrée ou d'un fichier de ligne de commande. Par exemple, ma fonction lit une ligne dans un fichier et l'imprime en utilisant getchar ()

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

Après avoir exécuté cela, le pointeur pointe sur EOF im en supposant? Comment pourrais-je le faire pointer à nouveau vers le début du fichier/ou même relire le fichier d'entrée

im l'entrer comme (./function <inputs.txt)

16
Kyuu

Si tu as un FILE* autre que stdin, vous pouvez utiliser:

rewind(fptr);

ou

fseek(fptr, 0, SEEK_SET);

pour réinitialiser le pointeur au début du fichier.

Vous ne pouvez pas faire cela pour stdin.

Si vous devez pouvoir réinitialiser le pointeur, passez le fichier en argument au programme et utilisez fopen pour ouvrir le fichier et lire son contenu.

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;
}
29
R Sahu

L'entrée redirigée/redirigée ne fonctionne pas comme ça. Vos options sont:

  • Lisez l'entrée dans un tampon interne (ce que vous semblez déjà faire); ou
  • Passez plutôt le nom de fichier comme argument de ligne de commande et faites-le comme bon vous semble.
4
paddy