Liste Einlesen klappt nicht



  • Hi Leute!

    Ich hab das Problem, dass beim Einlesen meiner Datei Testat.txt im ersten Durchlauf immer Datenmüll drin liegt. Selbst wenn die Datei leer ist springt die Funktion in die erste If-Anweisung und erkennt sie als true an obwohl der Wert fp eigentlich Null ist.
    Ist mein erstes Programm in C++. Habe als Testataufgabe bekommen eine speicherbare Liste für Mietwagen zu programmieren.
    Hab nun schon einige Stunden damit zugebracht den Fehler zu finden, aber irgendwie hab ich keinen Schimmer woran das hängt. Wäre euch daher um eurer Hilfe sehr verbunden.

    Danke,
    euer snoopy!

    void vorwaertsrueckwaerts(int a)
    {
    	anz=0; 
    	leer=true;
    	if((fp=fopen("Testat.txt","r")) != NULL)
    	{
    		while (!feof(fp))
    		{
    			if (leer == true)
    			{
    													// Liste anlegen (initialisieren)
    				act = new PKW;						// Listenel. anlegen im freien Speicher
    				fread(act,sizeof(PKW),1,fp);
    				first = act;						// Adresse des ersten Elementes merken
    				last = act;						    // zu Beginn ist erstes Element auch das letzte El.
    				last->back = NULL;
    				last->next = NULL;					// Adresszeiger auf nächstes El. ist NULL
    				leer = false;						// Liste existiert
    				anz++;
    				act->id = tempid;
    				if (tempid>id_wert)
    				{
    					id_wert=tempid;
    				}
    			}
    			else
    			{
    													// Verkopplung der Elemente realisieren
    				act = new PKW;						// weiteres Listenelement
    				fread(act,sizeof(PKW),1,fp);
    				if (!feof(fp))
    				{
    				    act->back = last;
    					last->next = act;				// Verweis auf neues Element, statt NULL-Zeiger
    					last = act;						// ist auch das letzte Element
    					last->next = NULL;				// letztes Element next muß NULL sein
    					anz++;
    					tempid = act->id;
    					if (tempid>id_wert)
    					{
    						id_wert=tempid;
    					}
    				}
    			}
    		}
    		printf("\nEs wurden %d Datens\x84""tze gelesen",anz);
    		getchar();
    		if (a == 1)
    		{
    			anzeigen('1');
    		}
    		if (a == 2)
    		{
    			anzeigen('2');
    		}
    	}
    	else
    	{
    		if ((a == 1) | (a == 2))
    		{
    			system("cls");
    			printf("Es wurden %d Daten gefunden",anz);
    			getchar();
    		}
    	}
    	fclose(fp);
    }
    


  • Koenntest du bitte Code-Tags reinmachen? Das kann man so nur sehr schlecht lesen.

    Uebrigens ist das C, kein C++, was aber nicht heisst, dass wir dir nicht helfen 🙂

    mfg
    v R



  • Weiß leider nicht was du mit Code-Tags meinst.

    Gruß
    Snoopy!



  • Schwachsinn, diese Formatierung ist zwar nicht der Standard, aber schneller und einfacher zu lesen! Ist für manche nur etwas gewöhnungsbedürftig.

    Sebo



  • Möglicherweise steht in deiner Datei ein ENTER-Zeichen als erstes zeichen drinne. Dann wird die Schleife auch durchlaufen


Anmelden zum Antworten