C++ (Konsole) eine mehrstellige Zahl löschen
-
ja, nur dass wir hier C++ machen und kein C.
in C++ geht das mit setwidth und precision und so weiter. das kannst du dir so einstellen, dass deine zahlen immer in der gleichen länge ausgegeben werden. und das kannst du danach wieder überschreiben
-
Skym0sh0 schrieb:
ja, nur dass wir hier C++ machen und kein C.
Deswegen war das auch in Klammern.
Es geht aber um das Prinzip.
-
ja, ok das stimmt natürlich. Da gebührt dir die Ehre
-
Danke DirkB, Skym0sh0 und _matze für eure Antworten, jedoch möchte ich keine Zahl an sich(cout << "7 ";), sondern eine Variable ausgeben(cout << i;).
-
HalloLeute schrieb:
Danke DirkB, Skym0sh0 und _matze für eure Antworten, jedoch möchte ich keine Zahl an sich(cout << "7 ";), sondern eine Variable ausgeben(cout << i;).
Die
waren keine absicht!!!
-
ja. davon sind wir dran...
edit programmbeispiel:
schau dir das einfach mal an, denn genau das meinen wir alle
#include <iostream> using std::cout; using std::endl; int main() { int i = 385; cout << "\""; cout.width(10); cout << i; cout << "\""; cout << endl; std::cin.get(); return 0x0; }
-
Skym0sh0 schrieb:
ja. davon sind wir dran...
Was meinst du damit?
-
Das ist uns auch klar.
Das kannst du auch machen.
Das mit dem "7 " bzw. " 7" waren ja auch nur Beispiel wo das Leerzeichen hin soll.
-
DirkB schrieb:
Das ist uns auch klar.
Das kannst du auch machen.
Das mit dem "7 " bzw. " 7" waren ja auch nur Beispiel wo das Leerzeichen hin soll.Aber dann passt es doch trotzdem nicht, wenn ich eine 1-stellige Zahl auf eine 2-stellige ausgeben will, oder habe ich da was falsch verstanden?
-
Du sollst mit dem Modifier die Variable immer mit einer festen Breite ausgeben.
Bei der Ausgabe werden bei Bedarf Leerzeichen eingefügt.
Dann hast du die Einerstelle immer am gleichen Ort.
-
DirkB schrieb:
Du sollst mit dem Modifier die Variable immer mit einer festen Breite ausgeben.
Bei der Ausgabe werden bei Bedarf Leerzeichen eingefügt.
Dann hast du die Einerstelle immer am gleichen Ort.Ja, genau das hab ich auch, aber das klappt nicht:
Sagen wir mal eine feste Breite von 4 Stellen.
Bei der Zahl 10 wäre das: cout << " 10"; Bei der Zahl 7 wäre das: cout << " 7";Wenn ich 10 mit 7 überschreiben will, wird die 7 an die 4 Stelle gesetzt und überschreibt die 0. Die 1 an der 3-ten Stelle von 10 bleibt jedoch.
So ergibt es: cout << " 17";
-
Ausprobieren, begreifen, umbauen, einbauen:

#include <iostream> #include <time.h> using std::cout; using std::endl; void sleep( clock_t wait ) { clock_t goal; goal = wait + clock(); while( goal > clock() ) ; } int main() { int i = 1100; while(i) { cout.width(10); cout << i--; for(int j=0;j<10;++j) cout << '\b'; sleep(10); } cout << endl; std::cin.get(); return 0x0; }
-
_matze schrieb:
Ausprobieren, begreifen, umbauen, einbauen:

#include <iostream> #include <time.h> using std::cout; using std::endl; void sleep( clock_t wait ) { clock_t goal; goal = wait + clock(); while( goal > clock() ) ; } int main() { int i = 1100; while(i) { cout.width(10); cout << i--; for(int j=0;j<10;++j) cout << '\b'; sleep(10); } cout << endl; std::cin.get(); return 0x0; }Danke _matze. Habe es ausprobiert und auch verstanden. Ich habe es jetzt jedoch so gemacht:
while(sek >= 0) { cout << setw(2); cout << sek--; for(int i = 0; i <= 1; i++) cout << "\b"; Sleep(1000); }Danke natürlich auch an alle anderen!!!
-
Wenn du immer zum Zeilenanfang zurück willst kannst du auch einfach ein einzelnes
\rausgeben.
-
hustbaer schrieb:
Wenn du immer zum Zeilenanfang zurück willst kannst du auch einfach ein einzelnes
\rausgeben.Danke, dasss weiß ich bereits. Werde es irgendwann mal gebrauchen

-
In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=) dann kann man die Anzahl der Durchläufe sehr einfach erkennen:
for(int i = 0; i < 2; i++)\\ 2 DurchläufeAllerdings kannst du auch gleich die zwei \b direkt ausgeben.
(aber der Compiler wird das eh optimieren)
-
DirkB schrieb:
In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=)
Also ich finde, das ist eigentlich reine Geschmackssache. Manchmal mach ich es so, manchmal aber auch anders

-
DirkB schrieb:
In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=) dann kann man die Anzahl der Durchläufe sehr einfach erkennen:
Im Prinzip ja. Nur schreibt man in C++ zunehmend != statt < und es gibt kein C/C++ (Beweis: Deine Vermutung.)
-
Genau. Es gibt nur C und C++. Kurz: C+C++!

-
#include <iostream> #include <time.h> void mysleep( clock_t wait ) { clock_t goal; goal = wait + clock(); while( goal > clock() ) ; } int main() { using std::cout; using std::endl; using std::flush; int i = 1100; while(i) { cout.width(10); cout << i--; cout<<flush;//Ohne irgend do ein flush springt der cursor schlimm mysleep(10); for(int j=0;j<10;++j) cout << '\b'; } cout << endl; std::cin.get(); return 0x0;//Scherzkeks. }Aber warum das umständliche '\b'?
Üblicher ist '\r'.while(i) { cout << '\r' ; cout.width(10); cout << i-- << flush; mysleep(10); }Wobei ich mich auch nicht um width kümmere, sondern
while(i) { cout << '\r' << i-- << ' ' << flush; mysleep(10); }, sowas sind ja nur mehr oder weniger Debug-Ausgaben.