Zeile überschreiben (Prozentanzeige)
-
Hallo,
Ich habe mit der Hilfe einiger Beträge hier im Forum einen Code geschrieben, mit dem ich es nun schaffe, eine Zeile der shell Ausgabe zu überschreiben.
#include <stdio.h> #include <unistd.h> int main() { printf("******************************"); printf("bla"); sleep(2); printf("\rHallo\n"); return 0; }
Das Problem ist nur, dass nicht zuerst die Sternchen geschieben werden und dann nach einer Weile das "hallo" die Sternchen überschreibt, sondern gleich nach einer weile alles in der Zeile steht oder die Gewünschte Pause.
Weiß jemand, wie ich die Pause dort sichtbar eingebaut bekomme?
danke.
ps: hallo ans Forum erst einmal noch
-
1. Du hast dich im Forum geirrt.
2. Mit sleep kann man das nicht machen.
3. \n sorgt für einen Zeilenumbruch.
4. Entferne \r.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
dass, der Zeilenumbruch am Ende gemact wird ist in ordnung. das \r sorgt ja dafür, dass das "Hallo" wieder am Zeilenanfang ist (also die ersten Stenchen überschreibt)
Womit kann ich es denn machen, dass er erst die Sternchen ausgibt, dann eine weile wartet und dann das "Hallo" schreibt?
ps: tut mir leid, dass ich im Falschen Forum war, dachte, da es doe Sprache c++ ist, ich auch dort schreiben sollte ^^
-
Du programmierst eindeutig C! Hast du dir das falsche buch gekauft? In C++ macht man das ganz anders!
Auf deine Frage:
#include <stdio.h> #include <unistd.h> int main() { printf("******************************\n"); printf("bla\n"); sleep(2); printf("Hallo\n"); return 0; }
-
Ich spiele eigentlich gerade nur ein wenig herum, und da ich den g++ Compiler Benutze dachte ich, dass es c++ ist, da sich die beiden Sprachen für mich sehr ähneln. (Bin eher mit Java unterwegs)
Wie sollte ich das denn Programmieren? Denn jetzt schreibt er zwar die Zeilen UND wartet, aber er überschreibt nicht mehr
-
ps: habe den Code jetzt für c++ umgeschrieben, aber immernoch das selbe Problem
#include <iostream> #include <ostream> using namespace std; int main() { cout << "******************************"; sleep(1); cout << "\rHallo\n"; return 0; }
-
Du möchtest vmtl. nach dem erste
cout << …
noch eincout.flush();
oder so.edit: Oder
cout << "foo" << flush
oder so.Und zum Überschreiben der Sternchen: Du überschreibst sie ja. Aber eben nur da, wo Du das "Hallo" ausgibst. Häng mal an das "Hallo" ein paar Leerzeichen dran, dann verstehst Du vmtl. besser, wie das funktioniert.
-
stdout gibt bei dir nur ganze Zeilen auf einmal aus.
Mach ein \r ans Ende der *#include <stdio.h> #include <unistd.h> int main() { printf("******************************\r"); printf("bla"); sleep(2); printf("\rHallo\n"); return 0; }
-
Wenn du einen Timer willst, dann kann der mit sleep so aussehen:
#include <iostream> using namespace std; void ShowTimer(int seconds) { for(int i = seconds; i >= 0; --i) { sleep(1); cout << "\r" << i; } } int main() { ShowTimer(5); return 0; }
Leider kann man während dem Sleep nichts machen, weshalb du dich über den Inhalt von #include <time.h> informieren solltest.
-
Er will doch nur einen flush, genau wie nman es gesagt hat. In C flusht man übrigens mit fflush(stdout). Man sollte aber nie fflush(stdin) verwenden!!