Auf den Buffer von cin zugreifen



  • Bitte nicht wegen der Länge abschrecken .. Ich wollts nur verständlich dokumentieren. Danke

    Hallo an Alle,
    ich hab grad dieses Forum gefunden und mich gleich mal registriert.
    Ich hoffe Ihr könnt mir helfen da es meine Lehrer nicht mehr können (heißt aber nichts).

    Ich schreibe gerade ein Konsolenprogramm (!) und möchte banal ausgedrückt cin einen Anfangswert zuordnen.
    Ich habe ein Einstellungen-Menü, wo der User mit oben-unten auf einen Eingabepunkt mehrfach zugreifen kann.
    Also er hat z.B. 2 Eingaben ...
    Auswahl steht bei "Name" und durch drücken der Leertaste erscheint der Cursor

    ___>__Name: | *//der '|' ist der Cursor und die '' Leerzeichen*
    _______Email:

    zuerst soll er den Namen eingeben können:

    _______Name: Florian //dann Enter und den Abwärtspfeil
    ____>__Email: |

    dann das Emailfeld:

    _______Name: Florian
    ____>__Email: florian@go2flo.com

    wenn man jetzt wieder nach oben geht soll es nicht so ausschauen:

    ____>__Name: | //Eingabe gelöscht und neues cin
    _______Email: florian@go2flo.com

    sondern so:

    ____>__Name: Florian| //Alter Wert automatisch ins cin und gleich (!) veränderbar
    _______Email: florian@go2flo.com

    Mit Windowprogrammierung ist das dann alles kein Problem, aber wie das in der Kosole geht hat hoffentlich einer eine Antwort. Danke schon jetzt!

    Die Werte werden natürlich wie immer beim Druck von Enter abgespeichert und würden dann in den Buffer von Cin einfach hineingeschrieben werden müssen.
    Sicher ich könnte mir das alles selbst schreiben mit getch() und getch() und immer auf int(8) und int(13) abfragen aber ich kann mir echt nicht vorstellen, dass vor mir noch niemand auf diese Idee gekommen ist. Bei richtigen Eingabefeldern würde man einfach einen Defaultwert zuweisen.

    Ich bin schon auf istreams und istream_withassign-Klassen gestoßen, aber so tiefgründiges Wissen hab ich noch nicht um das dann auch anzuwenden.

    Vielen Dank schon im Vorhinein und
    mit Hoffnung auf viel Wissen.
    Schöne Grüße
    Florian



  • Das musst Du alles leider selber machen... oder Du verwendest ein passendes Framework wie z.B. ncurses...



  • Okay ... Dankeschön für die Antwort.
    Ist wahrscheinlich das simpleste es einfach selbst zu schreiben ...

    Noch eine Frage:
    Wie wird Cin oder Scanf oder Gets etc allgemein gebuffert.
    Gibt es da einen Filebuffer oder wird das dann mit lokalen Variablen gelöst.
    Also stdin ist doch ein Filepointer oder? Zugreifen kann man aber nicht leicht oder?

    Ich hätte nur gerne ein bisschen Einblick.
    Ebenfalls dankeschön!
    Schöne Grüße aus Wien
    Florian



  • Da Du unter Windows arbeitest, muss alles die WinAPI verwenden. Und hier gibt es für die Console drei Funktionen um Eingaben abzufragen:
    - ReadFile
    - ReadConoleInput
    - PeekConsoleInput

    Siehe: http://msdn.microsoft.com/library/en-us/dllproc/base/readconsoleinput.asp

    Die CRT und die STL verwenden diese obigen Funktionen...



  • danke für die schnelle antwort ...
    werd mir dieses forum merken.
    weiter so ...
    freundliche grüße florian.


Anmelden zum Antworten