getline()


  • Mod

    Wir ahnen es doch alle, daher spreche ich es mal aus:
    Theorie: Das gepostete Beispiel ist gar nicht der Originalcode. Im Originalcode ist vorher irgendwo eine Eingabe mittels operator>>.



  • Wir ahnen es doch alle, daher spreche ich es mal aus:
    Theorie: Das gepostete Beispiel ist gar nicht der Originalcode. Im Originalcode ist vorher irgendwo eine Eingabe mittels operator>>.

    Nein wirklich nicht 😕
    Ich finde es schwachsinnig wenn ich hier nun andere 10 Funktionen poste wenn das die erste die Aufgerufen ist und in der keine andere benutzt wird?
    Und warum sollte ich den COde verstellen und fragen?

    Wenn das so ist, kannst Du dann noch weiter reduzieren? Und welchen Compiler/OS benutzt Du?

    OS: WIndows, Compiler: Code::Blocks (neuste Version und die Einstellungen die mir im Buch "Der C++ Programmierer" beschrieben worden)

    Ich kann natürlich wenn ich es braucht alles posten, wenn ich mir dann helfen könnet 😕



  • Skeptar schrieb:

    Ich kann natürlich wenn ich es braucht alles posten, wenn ich mir dann helfen könnet 😕

    Das kommt darauf an. Im Thread Wichtig: Den richtigen Code posten: reduziertes compilierbares Beispiel wird darauf hingewiesen, wie wichtig es ist ein minimales Beispiel zu konstruieren, das den Fehler reproduzierbar macht.

    Aus mindestens zwei Gründen hat sich das bewährt:
    1. häufig tritt der Fehler nicht mehr auf, wenn der Originalcode um eine Zeile o.ä. reduziert wird - nicht selten finden so Fragende Ihre Fehler selber.
    2. Ein minimales Beispiel copy&paste ich in meinen Editor, kompiliere und kann schnell helfen.

    Klar, oder?

    Du hast jetzt so ein Beispiel: ~50Zeilen in meinem Posting von gestern 18:28h. Die Frage auf deren Beantwortung ich jetzt brenne: wenn Du den Code kopierst und ausführst: tritt der Fehler dann auf?

    Wenn nicht ist es wahrscheinlich so, dass das Phänomen eben doch mit den 10 Funktionen zusammenhängt, die Du nicht gepostet hast.
    Da brauchst Du auch nicht peinlich berührt oder ärgerlich zu sein, u.U. sind die doch wichtig - wegen Sprachfeature xyz, das zufällig was ein '\n' in stdin schiebt. Das kannst du als Anfänger u.U. nicht wissen/beurteilen.
    Dann heisst es für Dich: reduzieren, reduzieren, reduzieren. Bis Du das Problem eingegrenzt hast, um dann Deinen (neuen, kurzen) Code zu posten.

    Good hunting!

    PS: Du kannst vor Z. 15 oben ein std::cout << "get(): " << cin::get() << '\n'; bauen, dann siehst Du ja, ob nicht doch ein '\n' im stream steckt.



  • Furble Wurble schrieb:

    Wenn nicht ist es wahrscheinlich so, dass das Phänomen eben doch mit den 10 Funktionen zusammenhängt, die Du nicht gepostet hast.
    Da brauchst Du auch nicht peinlich berührt oder ärgerlich zu sein, u.U. sind die doch wichtig - wegen Sprachfeature xyz, das zufällig was ein '\n' in stdin schiebt. Das kannst du als Anfänger u.U. nicht wissen/beurteilen.
    Dann heisst es für Dich: reduzieren, reduzieren, reduzieren. Bis Du das Problem eingegrenzt hast, um dann Deinen (neuen, kurzen) Code zu posten.

    Good hunting!

    So habe nun lange gesucht finde aber nichts.
    Könntest du eventuell einmal kurz drüber schauen?
    Falls ja soll ich den Code hier posten? (viele Funktionen mit 800+ Zeilen.. (geht sicherlich kürzer)) oder soll ich das auf meiner Seite zum download anbieten das du es dir ebend runterziehst oder per mail?

    Furble Wurble schrieb:

    PS: Du kannst vor Z. 15 oben ein std::cout << "get(): " << cin::get() << '\n'; bauen, dann siehst Du ja, ob nicht doch ein '\n' im stream steckt.

    Versucht bekomme aber eine Fehlermeldung.

    Fehler: get() ist nicht im namespace cin::



  • Skeptar schrieb:

    Furble Wurble schrieb:

    PS: Du kannst vor Z. 15 oben ein std::cout << "get(): " << cin::get() << '\n'; bauen, dann siehst Du ja, ob nicht doch ein '\n' im stream steckt.

    Versucht bekomme aber eine Fehlermeldung.

    Fehler: get() ist nicht im namespace cin::

    ähm...ja...das sollte

    std::cout << "get(): " << cin.get() << '\n';
    

    heissen. 🙄

    Ansonsten: Ich würde es mir mal anschauen.
    Mach Irgendwo einen download hin und poste den link.


  • Mod

    Die Frage wurde schon gestellt, aber irgendwie drückst du dich: Wenn du den Code, den du hier im Forum gepostet hast, exakt so wie er hier im Forum steht (ohne irgendwelche 10 Zusatzfunktionen, sondern Copy&Paste aus dem Forum in ein neues Projekt!) bei dir übersetzt und ausführst, tritt der Fehler dann überhaupt auf?
    Falls Nein: Wie sollen wir dir dann helfen? Siehe Furble Wurbles Beitrag und seinen Verweis auf die Erstellung eines Minimalbeispiels.
    Fall Doch: 😮 Möglicherweise Gremlins?

    P.S.: Beim Copy&Paste wirst du feststellen, dass die Header in deinen Beiträgen fehlen. Das mag dir wie eine gute Idee vorgekommen sein, als du das Beispiel gepostet hast, aber wie du feststellst (und wie Furble Wurble schon schrieb) nervt das eher. Da muss ein Helfer erst einmal von Hand alle Header nachtragen und eventuell noch Code ergänzen (bei deinem Eingangsbeitrag z.B. die main-Funktion), bevor er überhaupt anfangen kann, dein Problem nach zu vollziehen.



  • SeppJ schrieb:

    Die Frage wurde schon gestellt, aber irgendwie drückst du dich: Wenn du den Code, den du hier im Forum gepostet hast, exakt so wie er hier im Forum steht (ohne irgendwelche 10 Zusatzfunktionen, sondern Copy&Paste aus dem Forum in ein neues Projekt!) bei dir übersetzt und ausführst, tritt der Fehler dann überhaupt auf?
    Falls Nein: Wie sollen wir dir dann helfen? Siehe Furble Wurbles Beitrag und seinen Verweis auf die Erstellung eines Minimalbeispiels.
    Fall Doch: 😮 Möglicherweise Gremlins?

    Ja habe ich überlesen oder so nicht verstanden :/. Und ja wenn ich den Code bei mir so einfüge passiert auch nichts... . Da muss ich das nächste mal lieber vorher testen, weil ich dachte das würde auch da nicht "richtig" laufen.

    SeppJ schrieb:

    P.S.: Beim Copy&Paste wirst du feststellen, dass die Header in deinen Beiträgen fehlen. Das mag dir wie eine gute Idee vorgekommen sein, als du das Beispiel gepostet hast, aber wie du feststellst (und wie Furble Wurble schon schrieb) nervt das eher. Da muss ein Helfer erst einmal von Hand alle Header nachtragen und eventuell noch Code ergänzen (bei deinem Eingangsbeitrag z.B. die main-Funktion), bevor er überhaupt anfangen kann, dein Problem nach zu vollziehen.

    Ich dachte ich mache es ihm einfach und er packt die einfach in eine Datei und die Funktion über das Main Programm. Aber ja auch das kann ich so machen.



  • Furble Wurble schrieb:

    Ansonsten: Ich würde es mir mal anschauen.
    Mach Irgendwo einen download hin und poste den link.

    Das ist nett! 🙂
    Ich lade es gerade auf meiner HP hoch dauert aber immer ewig...
    Also wenn das fertig ist überarbeite ich diesen Beitrag und füge den Link bei.



  • So jedzt ist es endlich soweit 😃

    Hier der Link: http://xluxsx.bplaced.net/html/download.html
    Auf das C++ Kampfsystem klicken.



  • In Z.29 in Funktionen.cpp liest Du einen int ein.
    cin >> menue_wahl;
    Das abschließende '\n' bleibt im stream und wird erst durch das folgende getline() geschluckt. Das sieht für Dich so aus, als ob es übersrpungen wird.

    Siehe z.B. dieses Beispiel:

    #include <iostream>
    
    int main(){
      int i;
      std::cout << "einen int eingeben: ";
      std::cin >> i;
      std::cout << "Noch im stream: \'" << std::cin.get() << "\'!\n";
    }
    

    Du musst also einfach das '\n' aus dem stream entfernen.

    Das war jetzt nicht ganz unerwartet. Ich hoffe Du hast was draus gelernt!

    Vollständige Beispiele - copy & paste.
    Minimale Beispiele.
    Den Anweisungen der Helfer ist stets Folge zu leisten! 😉
    Fehler grundsätzlich in Seinem Code suchen - Compiler haben immer recht!

    Schoenes WE.



  • Furble Wurble schrieb:

    In Z.29 in Funktionen.cpp liest Du einen int ein.
    cin >> menue_wahl;
    Das abschließende '\n' bleibt im stream und wird erst durch das folgende getline() geschluckt. Das sieht für Dich so aus, als ob es übersrpungen wird.

    Siehe z.B. dieses Beispiel:

    #include <iostream>
    
    int main(){
      int i;
      std::cout << "einen int eingeben: ";
      std::cin >> i;
      std::cout << "Noch im stream: \'" << std::cin.get() << "\'!\n";
    }
    

    Du musst also einfach das '\n' aus dem stream entfernen.

    Das war jetzt nicht ganz unerwartet. Ich hoffe Du hast was draus gelernt!

    Vollständige Beispiele - copy & paste.
    Minimale Beispiele.
    Den Anweisungen der Helfer ist stets Folge zu leisten! 😉
    Fehler grundsätzlich in Seinem Code suchen - Compiler haben immer recht!

    Schoenes WE.

    Danke für die Hilfe!! Ich hoffe dieser Fehler passiert mir nicht nocheinmal.

    Wir ahnen es doch alle, daher spreche ich es mal aus:
    Theorie: Das gepostete Beispiel ist gar nicht der Originalcode. Im Originalcode ist vorher irgendwo eine Eingabe mittels operator>>.

    Okay Sorry.


Anmelden zum Antworten