probleme bei der ausführung einer while anweisung
-
Hi, :xmas1:
ich habe bei der Ausführung einer while schleife probleme.
ich prog zwar vc++, aber das passt auch hier her.Folgendes zwei fkt. (methoden)
in beiden werden while-anweisungen abgearbeitet. In Fkt. 1 funktioniert alles super:CString alpha= ""; CString beta; while(query.GetLength() >0) { int wert = query.Find(' '); teilstringlinks = query.Left(wert); query = query.Right(query.GetLength() - wert); while(query.Left(1) == _T(' ')) { query.TrimLeft(); } StoppwortEingabe(); beta.Format("%s %s",alpha , teilstringlinks ); alpha = beta; }
Aber in Fkt. 2 läuft irgendetwas schief ich finde aber nciht wo:
CString stoppwortliste = "...\\stoppwortliste.txt"; CString in; ifstream out(stoppwortliste,ios::in); char buff[100]; while(in != teilstringlinks || !out.eof()) { out.getline(buff,250); in.Format("%s", buff); if(in ==teilstringlinks) { teilstringlinks.Empty(); } } out.close();
Di eFkt 2 wird durch StoppwortEingabe(); aufgerufen.In Fkt 2 vergleiche ich zwei strings miteinander. Der eine kommt aus einer Txt, der andere aus der Fkt. 1 und wird über ein Editfeld eingegeben.
Wenn der Eingegebene String nur aus Stoppwörtern besteht( es stehen mehrer wörter in dem string), duchläuft es die while anweisung, in Fkt. 2, ohne Probleme, aber so bald ein zweites 'fremdes' wort enthält bleibtes direkt an der stelle hängen und die ganze Anwendung lässt sich nur noch per 'affengriff' beenden.Ich finde aber nicht den fehler...
Kann mir einer von euch helfen???:xmas2:
-
trenne mal den stream richtig ab:
out.close();
out.clear();sollte dann klappen
-
hi,
hab ich eben probiert.
Leider klappt es dann immer noch nicht.
-
Schau dir mal die Schleifenbedingung genau an. Es soll solange laufen, wie die Strings verschieden sind oder das Ende der Datei nicht erreicht ist? Sicher, dass du nicht und meinst?
P.S.: Was das Prüfen von eof in einer Schleifenbedingung angeht, wirst du hier auch eineige Threads finden.
P.P.S.: in = buff; tuts auch. Du brauchst kein Format. Noch besser wäre std::string.
P.P.P.S.: In einem Puffer von 100 Zeichen 250 einlesen zu wollen, ist nicht so toll.
-
ich denke schon das ich das richtig gemeint habe mit den oder.
Da der String ja schon vor dem Ende des Files durchaus schon gefunden werden kann, aber auch gar nicht gefunden werden kann.
Wen ich und sage müssen doch beide bedingungen eintreten, bei oder nur die eine.
-
pumucklkobold schrieb:
ich denke schon das ich das richtig gemeint habe mit den oder.
Denke ich nicht.
Da der String ja schon vor dem Ende des Files durchaus schon gefunden werden kann, aber auch gar nicht gefunden werden kann.
Wen ich und sage müssen doch beide bedingungen eintreten, bei oder nur die eine.Richtig. Beide Bedingungen müssen eintreten, damit die Schleife weiterläuft. String nicht gefunden und Dateiende nicht erreicht.
So, wie es jetzt ist, suchst du über das Dateiende hinaus, wenn du den String nicht findest. Du suchst auch weiter, wenn du den String gefunden hast, aber das Dateiende noch nicht erreicht ist.
-
echt??
muss ich doch ein und nehmen????
oder wie jetzt
-
danke mit dem && geht es jetzt
hätte gleich hier vorbei kommen sollen, hätte mir viel zeit gespart
-
mal was anderes zu iftraem
wie kann ich es umgehen, das leerezeilen eingelesen werden???
Sprich einlesen aus Txt. wenn er eine leerezeile findet nicht beachten sonst einlesen.
-
Du könntest es so machen:
std::ifstream in("Test.txt"); for(std::string line; std::getline(in, line); ) { if(line != "") { //mach was } }
-
Wieso dann nicht einfach
if (!1ine.empty()) { //mach was }
?
:xmas1: