Ausgabe in der Konsole "überschreiben"
-
Hallo!
Ich habe noch nicht so viel Erfahrung mit C++ gesammelt und stehe jetzt vor einem Problem. Hoffentlich könnt ihr mir helfen!

Also:
Ich bin gerade dabei ein Programm zu schreiben, das eine Zahl auf ziemlich viele Nachkommastellen berechnet. Darin kommt eine For-Schleife vor, die in jedem Durchlauf die immer genauere Zahl ausgibt. In der Konsole sieht das dann ungefähr so aus:
1.23333
1.22333
1.22233
1.22223Ich hätte jetzt gerne, dass nicht immer eine neue Zeile gemacht wird, sondern der bereits ausgegebene Wert aktualisiert wird. Das heißt einfach die Zahl steht da und wird immer genauer, und nicht dass ein genauerer Wert immer dahinter geschrieben wird.
Gibt es da eine Möglichkeit?
Danke für jede Antwort und euch ein fröhliches Weihnachtsfest! :xmas1:
MadeVr
-
Guck dir mal die Improved Console an (hier im Win32-Konsolenforum).
-
Vielen Dank!
Könnte sein, dass es das ist was ich suche, aber könntest du mir noch ein wenig auf die Sprünge helfen?
Einbinden usw. geht problemlos, nur wie genau soll ich mein Problem lösen? Gibt es eine spezielle Funktion oder muss ich mir was zusammenbasteln?
-
Ich hätte dazu eine kleine Zwischenfrage: da das ja am pc recht fix geht wird der User von diesem allmählichen Annäherung doch kaum noch was mitbekommen (außer du nutzt sleep() o.ä) Lohnt sich da das Ausschreiben überhaupt noch? WÄre es vielleicht nicht lohnenswerter, die Zahl einfach fertig auszurechnen und dann auszugeben?
Ist natürlich keine Antwort auf das Problem, nur ne Frage.
-
Glaub mir einfach, es dauert schon ein wenig...

Nein, es ist variabel, ich arbeite mit GMP, und da kann man bekanntermaßen ja die Genauigkeit einstellen, und wenn ich mit laaaaaaaangen Kommazahlen arbeite, brauche ich auch mehr Präzision, und je höher die Präzision, desto länger dauerts.
Also, kann schon sein dass der PC bei bestimmten Einstellungen nur ca. 1 Sekunde brauch, bei manchen aber sicher auch mehr als 5 Minuten...
-
naja clear doch einfach immer die console und schreib dann wieder die zahl ...
-
Hm, dann rutscht die Zahl aber trotzdem immer weiter nach unten (es sei denn du meinst was anderes - poste doch einfach mal ein Beispiel!). Außerdem wird die Zahl jetzt nicht mehr umgebrochen, sondern geht einfach weiter. Kann man das irgendwie ändern?
-
Alles klar, ich hab einen Lösungsansatz gefunden!

Ich nutze einfach den (ich glaube er heißt so?) Wagenrücklauf, "\r". Das funktioniert dann schon so wie ich es mir vorstelle.
Einziges Problem dabei ist wiederrum:
Wenn die Zahl länger als eine Zeile ist, funktioniert das nicht mehr, da der Wagenrücklauf dann einfach nur in der letzten Zeile bewirkt, dass der Cursor an den Anfang verschoben wird, nicht aber bis zum Anfang der Zahl. Gibt es dafür nun eine Lösung?
-
Wandle die Zahl in einen string um(steht in der FAQ, wenn ich mich nicht irre).
Dann schau ob der string länger als 80 Zeichen(Länge der Konsole, wenn ich mich nicht irre) ist.Wenn ja gehe soviele Zeilen zurück, wie es nötig ist.
Bin kein sehr guter Programmierer => muss nicht funktionieren!
Wenn es nicht funktionierert:
Anzahl der Zeichen im string mit string.size() oder string.length() (, wenn ich mich nicht irre) und mit '\b' soviele Zeichen zurück wie nötig.Bin kein sehr guter Programmierer => muss auch nicht funktionieren!
-
Weil heute Heilig Abend ist, schenke ich dir ein '\r'. Ist aber nur eine 30-Tage-Testversion, danach fallen Lizenzkosten an: 2,49EUR pro Monat.
Viel Spass.
-
Danke, danke!
@Christkind:
Bin ich auch schon draufgekommen, siehe oben.@|M|:
Habe ich gerade auch schon probiert. Das Problem ist scheinbar das auch \b immer nur für eine Zeile geht, d. h. es kann immer maximal eine Zeile gelöscht werden.