Hilfe für Neulinge



  • wie wärs wenn du mal lernst was ne schleife ist?

    Sonst gehts Dir aber gut?

    Da die Anwendung nach dem Ende der Main Funktion beendet ist, ist es meiner Meinung nach das sinnvollste, nach dem Eintritt in diese eine while Schleife einzubauen und bei jedem Durchlauf die Abbruchbedingung neu zu checken...

    So hab ichs zumindest immer gelöst...

    Was wäre denn Deiner Meinung nach die ultimative Lösung?



  • es ging doch bei dem programm nur um einen vergleich...

    eine schleife wäre imho nur sinnvoll, wenn mehrere vergleiche realisiert werden sollen



  • Wenn das Programm ohnehin nur einmal durchlaufen soll reicht ein std::cin.get() oder irgendwas ähnliches was auf einen Tastendruck oder eine Eingabe wartet um das Fenster offen zu halten.



  • ich mach immer 2x cin.get() xD



  • Sollte das jetzt ein Witz sein? Wenn nein, wieso?



  • hab ich mir irgendwie angewöhnt xD
    is mir sicherer 😛

    ne, das war kein witz



  • Ahja, sehr sinnvoll...

    Machs doch dann so:

    for ( int i = 0; i < 150; ++i )
    {
      std::cin.clear();
      std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
      std::cin.get();
    }
    

    Oder totsicher (ohne jegliche Rückkehr):

    for ( ;; );
    


  • Wohin son Post doch führen kann 😃 😃 😃

    Okay, sofern das Programm nur einmal durchlaufen soll, ist das ja alles i.O.!

    Ich find halt nur das es zum guten Stil gehört, ein Programm erst dann zu beenden, wenn der Benutzer es will...

    MFG
    Dapp



  • xD



  • hokage schrieb:

    ich mach immer 2x cin.get() xD

    Das ist Unverständnis von IOstreams. Der OP liefert ein Beispiel für das Mischen von formatiertem Input (operator>>) mit unformatiertem (get). Diese beiden Arten verhalten sich unterschiedlich. Das ignore ist eine denkbar schlechte Lösung, die die Symptome tötet, aber das eigentlich Problem wird nicht erkannt (und neue geschaffen).

    operator>>(int&) liest alle Zeichen der Zahl ein und hört sofort danach auf, wenn das nächste Zeichen keine Zahl ist (per Lookahead). Sprich, wenn du nach der Zahl Enter gedrückt hast, bleibt das \n (und immer nur ein \n - ein eventuelles #13#10 unter Windows wird durch das Code Conversion Facet des Streams in \n umgewandelt) im Stream stehen. Und dieses wird mit dem nächsten cin.get dann gelesen, was das Programm sich dann auch beenden lässt.

    In diesem Fall würde tatsächlich ein zweimaliges cin.get es tun. Allerdings nicht immer, denn es hängt immer davon ab, was man mit dem Stream gemacht hat (z.B. formatierten Input mit unformatiertem gemischt), deshalb ist auch das kein Allheilmittel und man muss selbst nachdenken.

    Nachtrag:
    Quark... auch zweimal cin.get muss nicht helfen. Wenn du 567ABC\n eingegeben hast, wird 567 als Zahl interpretiert (bevor jemand fragt - ja, so arbeitet formatierter Input) und der Rest (ABC\n) bleibt im Stream. Eine sichere Lösung gibt es nicht. Selbst das ignore hat keine 100% Garantie auf Erfolg, da nur alle Zeichen im Buffer gelöscht werden, aber weitere aus der Pipe kommen können - von dem möglicherweise sinnvollen Inhalt im Stream abgesehen, den man damit killt.


Anmelden zum Antworten