daten für cin-input vorgeben?



  • Nicht, wenn ich richtig verstehe, was du meinst.

    std::cin, std::cout etc. sind als Datenströme konzipiert (daher auch <iostream>). Um eine Analogie zu bemühen, du liest Daten aus std::cin wie Wasser aus einem Wasserhahn. Was du da vorhast, ist etwa so, als wolltest du das aufgefangene Wasser in die Leitung zurückstopfen und es ermöglichen, vor dem erneuten Ausguss anderes Wasser zuzusetzen - was eine ziemlich verrückte Apparatur benötigte.

    Das Streamkonzept ist zwar einfach und sehr flexibel (Stichwort stream redirection), aber nicht unglaublich mächtig. Für das, was du vorhast, wirst du dich auf andere Dinge stützen müssen (um in der Analogie zu bleiben: beispielsweise das Reservoir, aus dem der Wasserhahn gespeist wird).

    Wenn du auf UNIX oder Linux arbeitest, bringt dich vielleicht ncurses weiter. Für Windows ist mir etwas derartiges nicht bekannt, aber wenn es so etwas dafür gibt, wird es wohl auf den conio-Funktionen fußen (das alte DOS-API).



  • Wenn ich dich richtig verstehe, dann kannst du da doch einfach einen kleinen Wrapper für das einlesen machen, wo du dann anstatt des real eingelesenen strings einen mit dem gewünschten string vorne angehängt zurück gibt.



  • hab mich anscheinend nicht ganz klar ausgedrückt 😃

    also: wenn ich mit cin/getline() einlese, starte ich sozusagen mit einem leeren string und kann dann x zeichen eingeben und bei bedarf mit den pfeiltasten zurückgehen und zeichen löschen/einfügen.

    was ich jetzt gern hätte, ist, nicht mit einem leeren string zu starten, sondern zB mit "heute ist der 18. Juli 2010" - so, dass ich den text noch ändern kann. eben so, als ob ich ihn gerade ganz normal eingegeben hätte.

    ich dachte mir, dass es da vl. eine möglichkeit gibt, quasi in den puffer von cin direkt (vom programm aus) reinzuschreiben oder die eingabe über die tastatur irgendwie zu "simulieren". pseudocodemäßig so was wie

    cin.insertInBuffer("heute ist der 18. juli");
    

    hoffe, es ist jetzt verständlicher. gibts da eine möglichkeit?


  • Mod

    Nein, du brauchst eine Konsolenbibliothek oder GUI. Das was du da als Eingabebearbeitungsoberfläche siehst ist nicht cin. Das ist die Eingabebearbeitungsoberfläche des Systems in dem dein Programm läuft, also meistens die Konsole in der das Programm gestartet wurde. Wie schon erklärt wurde, nimmt cin die Daten nur als großen Strom von Zeichen wahr. Der Operator >> heißt nämlich nicht "Mach eine Eingabeaufforderung und lies was von der Tastatur ein", sondern "Lies dies und das aus dem Eingabestrom aus". Woher der Eingabestrom kommt, nimmt cin gar nicht wahr, das kann z.B. eine Tastatur sein muss aber nicht. Woher die Daten genau kommen gibt das System vor in dem das Programm läuft und dessen Eingabeaufforderung ist es auch die du siehst.

    Daher musst du für solche Tricks zwangsläufig mit dem System kommunizieren, üblicherweise macht man dies per GUI oder Konsolenbibliothek.



  • ok, danke. weißt du zufällig, wie das mit einer konsolenbibliothek gehen würde?

    aber wenns zu aufwändig ist, werd ichs lassen - ist kein muss, ich dachte nur, dass das ev. einfach geht und net schlecht für die usability wäre.


  • Mod

    zoidberg schrieb:

    ok, danke. weißt du zufällig, wie das mit einer konsolenbibliothek gehen würde?

    Allgemein weiß ich es nicht, weil ich selber immer nur rein streamorientierte Anwendungen schreibe. Aber ich weiß zumindest, dass man sich für eine Plattform entscheiden muss, weil die üblichen Konsolenbibliotheken nicht portabel sind. Also musst du uns zuerst deine Plattform verraten. Oder besser du fragst gleich im passenden Unterforum dafür. Hier gibt es auch ein Forum für Win/DOS-Konsolen und eines für Linux/Unix. Dort wissen die Leute wesentlich mehr über dieses Thema.



  • Kannst du die Eingaben nicht in eine Textdatei auslagern? Dann kann man dort die Vorgaben bequem ändern, falls man das wünscht.



  • @SeppJ: werd ich bei gelegenheit machen, aber für das aktuelle projekt lass ichs, da bin ich ohnehin schon ein bissl spät dran 😃

    @kkkk: ja klar, workaround würd auch gehen. zweck der sache wär gewesen, eine schnelle und unkomplizierte textänderung zu ermöglichen (und file aufmachen, ändern, speichern, schließen und dann quasi "weiterlaufen lassen" ist ein bissl zu umständlich).

    auf jeden fall danke an alle, die sich hier beteiligt haben. 🙂 wenn ich die sache weiter verfolg, werd ich im WinAPI-forum ein neues thema aufmachen.



  • zoidberg schrieb:

    @SeppJ: werd ich bei gelegenheit machen, aber für das aktuelle projekt lass ichs, da bin ich ohnehin schon ein bissl spät dran 😃

    @kkkk: ja klar, workaround würd auch gehen. zweck der sache wär gewesen, eine schnelle und unkomplizierte textänderung zu ermöglichen (und file aufmachen, ändern, speichern, schließen und dann quasi "weiterlaufen lassen" ist ein bissl zu umständlich).

    auf jeden fall danke an alle, die sich hier beteiligt haben. 🙂 wenn ich die sache weiter verfolg, werd ich im WinAPI-forum ein neues thema aufmachen.

    Zumindest das Öffnen und "weiterlaufen lassen" könnte man automatisieren. Die Abfrage zum Speichern (bei Änderung) würde der Editor dann ohnehin stellen. Da müsste man nur auf Ja drücken.



  • Hallo... mein erster Beitrag in diesem Forum und dann noch auf einen total veralteten Thread... aber egal. Da ich mich mit dem gleichen Problem rumgeschlagen habe und keine Lösung fand, hier nun meine Workaround:
    Die Tastatureingabe über
    keybd_event((BYTE)VkKeyScan('>>zeichen<<'), 0, 0, 0);
    simulieren. Ist'n bisschen geprutscht, funzt aber.

    Grüße.


Anmelden zum Antworten