Kompilierfehler
-
Hallo erstmal,
Ich habe in letzter Zeit immer mehr den Eindruck mit dem Compiler(oder Linker oder was auch immer) von DEVCPP stimmt etwas nicht. Immer wieder klappt irgendwas nicht und ich sehe keinen Fehler. Z.B. dieser Codeblock:
... ... } else if (action == "Zauber") { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); cout<<"Bitte gebe an, welchen Zauber du wirken willst (Fuer eine volle Liste aller erlernten Zauber, bitte -s schreiben):\n"; string spl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN); getline(cin,spl); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); int rest; rest = checkspell(spl); ... ...Hier wird einfach das getline in Zeile 8 übersprungen, es wird einfach weiter gegangen. Ersetze ich jetzt aber dieses getline durch den Code:
cin>>spl;Dann klappt es wieder, benutze ich wieder getline, klappts wieder nicht.
Das ging ab einem Punkt (kann euch nicht sagen wann genau) so, vorher funktionierte es mit getline prima.Solche Probleme habe ich in letzter Zeit immer, auch andere. Weiß jemand woran das liegt und wie man es beheben kann?
Danke für die Hilfe schonmal
-
Hi,
könnte sein das du was mit dem Stream vermasselst.
Schreib mal ein:cin.ignore(numeric_limits<streamsize>::max(), '\n');vor dein getline();
-
Alemarius Nexus schrieb:
Ich habe in letzter Zeit immer mehr den Eindruck mit dem Compiler(oder Linker oder was auch immer) von DEVCPP stimmt etwas nicht. Immer wieder klappt irgendwas nicht und ich sehe keinen Fehler.
Das ist mir auch aufgefallen!
Seitdem benutz ich den nicht mehr!
Ich finds merkwürdig, weil der Compiler selbst ja auch von anderen IDEs benutzt wird! Und da funktionierts komischerweise!
Liegt wohl daran, dass der speziell für die IDE zugerichtet wurde!
Merkwürdig!
Vllt. ein Speicherproblem? Speicherüberlauf, der den Code irgendwie zurichtet? ... eher unwahrscheinlich!
Benutz doch mal den Debugger, und erzähl, was der so sagt!
Gruß
tHOMY
-
Hallo
Zieh dir doch mal ie Express Version com Visual Studio. Da macht das Programmieren wieder richtig Spaß.
chrische
-
Alemarius Nexus schrieb:
Hallo erstmal,
Ich habe in letzter Zeit immer mehr den Eindruck mit dem Compiler(oder Linker oder was auch immer) von DEVCPP stimmt etwas nicht. Immer wieder klappt irgendwas nicht und ich sehe keinen Fehler. Z.B. dieser Codeblock:
In dem Code ist auch kein Fehler. Du hast nur vergessen, die Überreste der vorherigen cin-Eingabe aus dem Puffer zu kratzen:
int zahl; cin>>zahl; // *1* ... string zeile; getline(cin,zeile); // *2a* cin>>zeile; // *2b*Bei *1* gibst du eine Zahl ein und bestätigst diese Eingabemit der Enter-Taste - die Zahl wird aus dem Eingabepuffer gelesen und in 'zahl' untergebracht, die Enter-Taste '\n' bleibt zurück. getline() bei *2a* liest so lange Zeichen aus dem Puffer, bis es ein '\n' findet - da noch eins von *1* übriggeblieben ist, geht das recht schnell
(im Gegensatz dazu werden bei Variante *2b* erst alle Whitespaces inklusive des '\n' verworfen und das nächste eingegebene Wort gelesen).Die Lösung des Problems hat KasF bereits genannt: cin::ignore().