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 Zitieren
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 Zitieren
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 Zitieren
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. Zitieren
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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.