Konsolenausgabe manipulieren?
-
Wenn du die Ausgaben immer veränder möchtest, könntest du die couts umleiten in einen eigenen Buffer und dann diesen nach Herzenslust bearbeiten und anschliessend den bearbeiteten Buffer in die Konsole ausgeben...
-
Naja, aber ich will sie ja erst mit cout ausgeben und dann nachträglich verändern!
-
Das spielt ja keine Rolle da du zuerst das richtige Ausgeben kannst und dannach das bearbeitete...
-
tsp schrieb:
Naja, aber ich will sie ja erst mit cout ausgeben und dann nachträglich verändern!
Hmmmm ich bin da einb wenig skeptisch, ob das nicht an prinzipielle Grenzen stößt.
Immerhin handelt es sich IIRC hier um Streams und deren Aufgabe ist es, Ausgabedaten entgegenzunehmen und nur so lange zu puffern, bis sie ausgegeben ("geflusht") werden. Danach sind sie nicht mehr im Stream und können auch nicht mehr in ihm manipuliert werden....std::cout ist eben kein Datencontainer.
Deswegen mein Vorschlag: Halte Deine Daten in einem Container (string dürfte auch erstmal reichen), den Du dem Anwender anzeigen und auf dessen Eingaben hin ändern kannst.
Gruß,
Simon2.
-
Mal ne andere Frage:
Wie kann ich das mit cout Ausgegebene auf der Konsole wieder löschen?
-
will dich ja nicht enttäuschen, aber die Konsole ist nicht dafür gedacht das man da was löscht oder visualisiert damit. Die Konsole ist nur da um mal einen String anzeigen zu können damit man ein wenig was sieht aber nicht mehr - im Prinzip willst du ja ne GUI und nicht so ne doofe Konsole
- prinzipiell kann man auch mit Direct3D in die Konsole Rendern, aber das ist nicht der Sinn davon. Spar dir lieber die Zeit irgendwas auf der Konsole auszugeben und arbeite dich in ein GUI Framework ein (Tutorials dazu gibt’s ja auch in diesem Forum)wenn du unbedingt bei der Konsole bleiben willst -> such mal nach Advanced Console hier im Forum – da kann man Farbigen Text ausgeben und anderen Unsinn damit treiben
-
Hi,
ich unterstütze Vertexwahn und möchte nur ergänzen: Man muß halt bedenken, dass man mit
Vertexwahn schrieb:
...Direct3D ... GUI Framework ... Advanced Console ...
den sicheren Pfad des C++-Standards verlässt und sich in die aufregende Welt der proprietären Programmierung wirft. Ist nichts Schlimmes, aber die C++-Bücher/Tutorials/Foren/... helfen einem da dann weniger weiter, sondern nur noch die speziellen Dokumentationen der entsprechenden Erweiterungen.
Gruß,
Simon2.
-
Hallo zusammen,
Simon2 schrieb:
Hmmmm ich bin da einb wenig skeptisch, ob das nicht an prinzipielle Grenzen stößt.
Immerhin handelt es sich IIRC hier um Streams und deren Aufgabe ist es, Ausgabedaten entgegenzunehmen und nur so lange zu puffern, bis sie ausgegeben ("geflusht") werden. Danach sind sie nicht mehr im Stream und können auch nicht mehr in ihm manipuliert werden....std::cout ist eben kein Datencontainer.
gebe dir recht, aber denoch könnte man rein theoretisch den cout-stream umleiten z.B. in eine Datei.
Diese immer auf einen neuen Eintrag überprüfen, String manipulieren auf Konsole umleiten...
So müsste es eigentlich gehen.
Gruss an alle
-
Vertexwahn schrieb:
prinzipiell kann man auch mit Direct3D in die Konsole Rendern
hat zwar recht wenig mit dem thema zu tun, aber... wie geht das denn? und vor allem= wozu? :p
-
flownfluid schrieb:
Hallo zusammen,
...gebe dir recht, aber denoch könnte man rein theoretisch den cout-stream umleiten z.B. in eine Datei.Diese immer auf einen neuen Eintrag überprüfen, String manipulieren auf Konsole umleiten...
So müsste es eigentlich gehen.
Gruss an alle
Klar könnte man ein entsprechendes Programm schreiben, aber man hat damit komplett den Boden der Streams verlassen ... das hat dann einfach nichts mehr mit den Möglichkeiten und Konzepten von cout&Co zu tun. Streams sind einfach "fire&forget"-Konstrukte und das widerspricht sich mit den Anforderungen hier.
Zu Deinem Vorschlag: Was, wenn das System/Runtime/... die Daten noch zwischenpuffert und erst verzögert auf der Platte ablegt ? Was in einem Umfeld, in dem man keine Schreibberechtigung auf Platte hat ? Was ... ?
Klar, es ist natürlich erstmal ein Weg, der für ein bestimmtes Programm/OS/Anforderung/... funktionieren kann, aber in der Allgemeinheit ist das keine saubere Lösung für eine interaktive Anwendung.
Gruß,
Simon2.
-
Simon2 schrieb:
Klar könnte man ein entsprechendes Programm schreiben, aber man hat damit komplett den Boden der Streams verlassen ... das hat dann einfach nichts mehr mit den Möglichkeiten und Konzepten von cout&Co zu tun. Streams sind einfach "fire&forget"-Konstrukte und das widerspricht sich mit den Anforderungen hier.
Ich bin auch der Meinung das man die couts so lassen soll und das man dann komplett die Eigenschaften damit verändert.
Wollte eigentlich nur auf die ursprüngliche Frage eine andere Lösung vorschlagen.
Simon2 schrieb:
Was, wenn das System/Runtime/... die Daten noch zwischenpuffert und erst verzögert auf der Platte ablegt ? Was in einem Umfeld, in dem man keine Schreibberechtigung auf Platte hat ? Was ... ?
Man muss es ja nicht in eine Datei schreiben sondern kann auch im Programm einen Buffer anlegen und somit entfällt auch das mit der Verzögerung