Doppelte ausgabe



  • {
    	system ("Cls");
    	char buffer [46];
    	datei = fopen ("C:\\Dokumente und Einstellungen\\mamar\\Desktop\\Adressverwaltung\\Adressen.txt", "r");
    	while (feof(datei) == FALSE) 
    	{
    		fgets (buffer, 46,datei);
    		printf ("%s", buffer);
    	}
    	getchar();
    	fclose(datei);
    }
    

    Bei dieser Funktion gibt es mir, die letzte Zeile der Datei "Adressen.txt" doppelt aus.
    Ich weiss nicht wieso....
    Könntet Ihr mir eventuell helfen??

    mfg 08mmarte



  • Ein Blick in die Man-Pages zu fgets könnte Licht ins Dunkel bringen:

    gets() und fgets() geben s zurück bei Erfolg, und  NULL  im  Fehlerfall
           oder wenn Dateiende auftritt ohne dass Zeichen gelesen wurden.
    

    Du könntest den Rückgabe-Wert von fgets abfragen, bevor du etwas ausgibts.
    Anscheinend ist feof() = 0, aber fgets() liefert keine Zeichen mehr.

    Dies ist eine Möglichkeit, ob sie nun bei dir zutrifft, k.a.

    while (!feof(datei)) 
        {
            if (fgets (buffer, 46,datei)) printf ("%s", buffer);
        }
    

    Gruß mcr



  • while ( fgets( buffer, 46, datei))
       printf( "%s", buffer);
    

    wird funktionieren. Die 46 Zeichen enthalten \r\n, da ist noch so
    ein kleiner Fallstrick. Du kannst den Puffer ruhig etwas großzügiger
    dimensionieren, der PC hat bestimmt jede Menge Speicher ...



  • Danke...


Anmelden zum Antworten