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
Wenn Sie eine haben FILE*
außer stdin
kö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;
}
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.
Schließen Sie einfach die Datei und öffnen Sie sie erneut
– asdf
3. September 2015 um 3:53 Uhr
EOF
sollte durch seinstdin
Also, was versuchen Sie zurückzusetzen. Wenn Sie dann Eingaben aus der Datei erhaltenrewind(fp)
hätte funktioniert– Gopi
3. September 2015 um 3:57 Uhr