Zeiger auf Dateianfang zurücksetzen

Lesezeit: 1 Minute

Wie könnte ich einen Zeiger auf den Anfang einer Befehlszeileneingabe oder -datei zurücksetzen? Zum Beispiel liest meine Funktion eine Zeile aus einer Datei ein und gibt sie mit getchar() aus

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

Nachdem Sie dies ausgeführt haben, zeigt der Zeiger auf EOF, nehme ich an? Wie würde ich es dazu bringen, wieder auf den Anfang der Datei zu zeigen oder sogar die Eingabedatei erneut zu lesen

ich gebe es ein als (./function

  • Schließen Sie einfach die Datei und öffnen Sie sie erneut

    – asdf

    3. September 2015 um 3:53 Uhr

  • EOF sollte durch sein stdin Also, was versuchen Sie zurückzusetzen. Wenn Sie dann Eingaben aus der Datei erhalten rewind(fp) hätte funktioniert

    – Gopi

    3. September 2015 um 3:57 Uhr

Wenn Sie eine haben FILE* außer stdinkönnen Sie verwenden:

rewind(fptr);

oder

fseek(fptr, 0, SEEK_SET);

um den Zeiger auf den Anfang der Datei zurückzusetzen.

Das kannst du nicht machen stdin.

Wenn Sie in der Lage sein müssen, den Zeiger zurückzusetzen, übergeben Sie die Datei als Argument an das Programm und verwenden Sie es fopen um die Datei zu öffnen und ihren Inhalt zu lesen.

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

  • Erwägen Sie die Verwendung von fseek über Rewind, da nur fseek einen Rückgabecode für die Fehlerprüfung bereitstellt: geeksforgeeks.org/g-fact-82

    – Bl00dh0und

    3. April 2018 um 8:03 Uhr

Benutzer-Avatar
Paddy

Piped / Redirected Input funktioniert so nicht. Ihre Optionen sind:

  • Lesen Sie die Eingabe in einen internen Puffer (was Sie anscheinend bereits tun); oder
  • Übergeben Sie stattdessen den Dateinamen als Befehlszeilenargument und machen Sie damit, was Sie wollen.

1352820cookie-checkZeiger auf Dateianfang zurücksetzen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy