Einlesen von mehrzeiligen Daten in stdin: Letzte Zeile doppelt



  • Hallo!

    Ich habe hier ein seltsames Phänomen, das ich mir nicht erklären kann. Es geht um folgendes kleines Programm:

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_LENGTH 1000
    
    int main() {[cpp]
    	char input[MAX_LENGTH];
    
    	while (!feof(stdin)) {
    
    		fgets(input, sizeof(input), stdin);
    		fputs(input, stdout);
    	}
    }
    

    Als Eingabe dient eine mehrzeilige Datei, die mittels dem "<"-Operator umgeleitet wird. Ich würde nun erwarten, dass die Datei Zeile für Zeile ausgegeben werden - was aber passiert ist, dass die letzte Zeile doppelt ausgegeben wird.

    Hat da jemand eine Erklärung? Danke schonmal im Voraus!



  • Borland/Turbo C++ Help schrieb:

    Bei Dateiende oder Fehler liefert fgets 0



  • Ah, auf so ein kleines Detail hab ich nicht geachtet.

    Besten Dank, so gehts:

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_LENGTH 1000
    
    int main() {[cpp]
        char input[MAX_LENGTH];
    
        while (fgets(input, sizeof(input), stdin)) {
    
            fputs(input, stdout);
        }
    }
    

Anmelden zum Antworten