Zeilenweise einlesen; debug error
-
Morgen,
hab 2 Probleme mit meinem Quellcode:Hier hätte ich gerne, dass die Zeile genau so, wie sie vom Nutzer eingegeben wird, auch in der Textdatei steht. D.h. es sollen auch die Zeilenumbrüche übernommen werden. Außerdem ist natürlich diefeste Grenze der Zeichenanzahl nicht gerade optimal.
while (beenden==false){ cin.sync(); cin.getline(text, 100); if (text[0]=='Q' && text[1]=='U' && text[2]=='I' && text[3]=='T'){ beenden=true; cout << endl; }else{ os << text << endl; } }
Hier läuft eigentlich fast alles glatt, nur am Ende meldet er einen debug error! abnormal program termination. Ich konnte aber nicht die Ursache dafür feststellen.
ifstream is(themendatei); string wort; string helptopic; string helptext; bool wordfound=false; cout << "Ihr Suchwort: "; cin >> wort; while (!is.eof()) { getline(is, helptopic); if (helptopic.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; }else{ string dataname=helptopic.substr(4, 80) + ".txt"; ifstream helpdata(dataname.c_str()); while (!helpdata.eof()){ getline(helpdata, helptext); if (helptext.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; } } helpdata.close(); } } is.close(); if (!wordfound){ cout << "Wort nicht enthalten." << endl; } cout << endl;
Ansonsten sind Verbesserungsvorschläge von Spezis natürlich gern gesehen.
-
Ansonsten sind Verbesserungsvorschläge von Spezis natürlich gern gesehen.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ
-
Ich fürchte, das sprengt meinen Rahmen.
Hat denn niemand ne "akzeptable" Lösung für meine Probleme?
-
Bitte was sprengt daran deinen Rahmen? Und was soll das überhaupt bedeuten?
Deine Schleife:
while (!is.eof()) { getline(is, helptopic); if (helptopic.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; }else{ string dataname=helptopic.substr(4, 80) + ".txt"; ifstream helpdata(dataname.c_str()); while (!helpdata.eof()){ getline(helpdata, helptext); if (helptext.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; } } helpdata.close(); } }
Wenn du jetzt am Ende von is angekommen ist, dann ist helptopic nach dem getline leer. Die if-Bedingung trifft nicht zu, also geht's in den else-Zweig.
Da machst du jetzthelptopic.substr(4, 80)
was auf einem leeren String zu wenig Freude führt.
Also einfach:
while (getline(is, helptopic)) { if (helptopic.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; }else{ string dataname=helptopic.substr(4, 80) + ".txt"; ifstream helpdata(dataname.c_str()); while (getline(helpdata, helptext)){ ... } helpdata.close(); } }
Jetzt hast du zumindest kein eof-Problem mehr.
Der Code hat natürlich auch sonst noch eine vielzahl schwächen. Allerdings habe ich keine Lust weiter darüber nachzudenken. Zumindest solange du offenbar keine Lust hast mitzudenken.
-
Wir haben noch ganze 2 Wochen Zeit um das Programm fertig zu schreiben und 100 Seiten Doku zu machen. Mir geht es erstmal darum ein lauffähiges Programm auf die Beine zu stellen. Das ich kein professioneller Programmierer bin, das nehme ich bewußt in Kauf.
Das war jedenfalls ne echte Hilfe, denn 30 Seiten Text hinter nem Link bringen mich nicht wirklich weiter. Wahrscheinlich hätte ich den Kommentar mit den professionellen Tips besser bleiben lassen sollen.Kannst Du mir vielleicht auch bei der Sache mit der zeilenweisen Eingabe helfen? Wie Du schon sagst, da gibts einige Schwächen, aber ne Beschränkung von 100 Zeichen bei der Eingabe einer HilfeZeile ist vermutlich zu schlecht.
-
Lies mit getline von cin ein, so wie Du es bei der Datei handelst
und Du bist die 100 Zeichen los.btw.: Die "30" Seiten sind das Lesen wirklich wert. In aller kürze wird Dort jeder einzelne Punkt angesprochen. Das Lesen der kurzen Texte sollte in den 2 Wochen machbar sein ;o)
-
Wo war denn da ein 30-seiten Link? Man kann eben nicht immer erwarten, dass einem die Lösungen vorgekaut werden, sondern muss sich manchmal auch selbst etwas Mühe geben. Und es schadet sicherlich nicht, auch mal was etwas allgemeineres zu lesen anstatt immer nur zu hacken und dann den Code ins Forum zu posten, auf dass das dann jemand verbessern möge
Mfg, smasher1985