unwissender2002 Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Hallo, da bin ich wieder mit meinem NICHTWISSEN. Also ich habe gewisse Daten die ich eine Date schreibe. Die kommen da auch an. Nun will ich sie wieder auslesen, das klappt auch noch, naja ich kann mir die Zeilen, die in der Datei stehen auf dem Bildschrim anzeigen lassen. Will ich den Zeileninhalt aus der Datei allerdings mit einem String vergleichen, klappt es nicht, obwohl sie offensichtlich gleich sind, gibt der Vergleich ein FALSE. Warum ??? Werden bei der Speicherung noch zusätzliche Steuerzeichen mit abgelegt ??? Gibt es eine Möglichkeit Zeilen aus einer Datei auszulese ohne dabei die Anzahl der maximalen Zeichen angeben zu müssen ??? Zur Visualisierung meinen Problems noch mein Quellcode : void speichere(){ ofstream ausgabe("d:/prog.txt", ios_base::out); if (ausgabe.good()){ zustand* hilf; hilf=zustandsliste; cout << "______ja______" << endl; while (hilf!=NULL){ ausgabe << hilf->name << endl; hilf=hilf->next; } ausgabe << "***" << endl; hilf=zustandsliste; ereignis* er; while(hilf!=NULL){ er=hilf->ereignisliste; while (er!=NULL){ ausgabe << hilf->name << "@" << endl; er=er->nochereignis; } hilf=hilf->next; } } } void lade(){ char zeile[250]; ifstream eingabe("d:/prog.txt", ios_base::in); if (eingabe.good()){ while (eingabe.eof()==false){ eingabe.get(zeile, 250); cout << zeile << endl; if (zeile=="mike"){cout << "GEFUNDEN" << endl;} DIESER VERGLEICH KLAPPT NICHT !!!!!!!!!!!!! } } } So nun hoff ich mal auf Hilfe, vielen Dank im Voraus. Jens
Eight Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Hi, ich hab mich zwar noch nicht so intensiv mit dieser Art des Einlesens aus Dateien beschäftigt, aber kann es ein, das in 'zeile' hinter "mike" noch das ein Zeilenumbruch( "\r" bzw "\n") steht??? Gruß, Eight
Eight Geschrieben 22. Oktober 2002 Geschrieben 22. Oktober 2002 Nochma hi, Hab mal ein bisschen mit dem Code rumprobiert und dabei festgestellt, das es auch sein kann, das der Vergleich scheitert, da in 'zeile' ja nicht nur "mike" steht. Schließlich ist 'zeile' 250 Zeichen lang (so steht in zeile[0] ein 'm', in Zeile[1] ein 'i' usw. zeile[5] bis zeile[249] sind dabei allerding noch uninitialisiert. Wahrscheinlich werden zum Vergleich aber alle 250 Zeichen herangezogen (nur vermutet, hab wie gesagt selten auf diesem Level zu tun). Gruß, Eight
Klotzkopp Geschrieben 23. Oktober 2002 Geschrieben 23. Oktober 2002 Originally posted by unwissender2002 if (zeile=="mike"){cout << "GEFUNDEN" << endl;} <Gebetsmühle> Man kann in C/C++ char-Strings nicht mit == vergleichen. </Gebetsmühle> Dabei wird nur ein Zeigervergleich gemacht, d.h. die Startadresse von zeile wird mit der Startadresse des Literals "mike" verglichen. Die werden nie gleich sein. Zum Vergleichen gibt es strcmp, wenn eine bestimmte Anzahl Zeichen verglichen werden soll, strncmp. Achtung: Diese Funktionen liefern Null, wenn die Strings übereinstimmen.
Guybrush Threepwood Geschrieben 23. Oktober 2002 Geschrieben 23. Oktober 2002 Hi, die 250 bedeutet nur wieviele Zeichen max. eingelesen werden sollen. Wenn in der Zeile weniger Stehen, dann werden auch nur soviele eingelesen wie in der Zeile stehen. Gruß Guybrush
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden