Countdown
-
Hallo,
ich hab hier einen Countdown, der mir die Sekunden runterzählt. Ich hätte jedoch gerne, dass dieses runterzählen immer in der gleichen Zeile passiert (d.h. die Zahlen sollen sich überschreiben und nicht nach einander aufgelistet werden) - da ich noch ein totaler Anfänger bin: Wie ist das möglich?
Nebenfrage: Ist es möglich in der nächsten Spalte mir dann auch noch die Minuten, Stunden usw. anzeigen zu lassen?
//Libarys #include <cstdlib> #include <iostream> #include <stdio.h> #include <time.h> #include <math.h> //Rechnung void wait ( int seconds ) { clock_t endwait; endwait = clock () + seconds * CLK_TCK ; while (clock() < endwait) {} } //Main-Funktion int main () { //Deklarationen int n, sekeing, sek, mineing, min, stueing, stu, day, dayeing; //Eingabe std::cout<<"Bitte Tage eingeben\n"; std::cin>>dayeing; std::cout<<"Bitte Stunden eingeben\n"; std::cin>>stueing; std::cout<<"Bitte Minuten eingeben\n"; std::cin>>mineing; std::cout<<"Bitte Sekunden eingeben\n"; std::cin>>sekeing; //Berechnungen day = dayeing * 86400; stu = stueing * 3600; min = mineing * 60; sek = sekeing + day + stu + min; //Bildschirm säubern system("cls"); //Schleife printf ("Starte Countdown…\n"); for (n=sek; n>0; n--) { printf ("%d\n",n); wait (1); } printf ("Countdown abgelaufen\n"); std::cin.get(); std::cin.get(); }
-
C mit C++ mischen ist wie Bier mit Likör.
-
nja ... da du sowieso schon scheiße da baust ... machen wir mal weiter damit

#include <cstdlib> #include <iostream> #include <ctime> void time_wait(unsigned int sec) { std::clock_t end = std::clock() + sec * CLK_TCK; while (std::clock() < end); } int main () { std::cout << "Tage: " << std::flush; unsigned int days = 0; std::cin >> days; std::cout << "Stunden: " << std::flush; unsigned int hours = 0; std::cin >> hpurs; std::cout << "Minuten: " << std::flush; unsigned int minutes = 0; std::cin >> minutes; std::cout << "Sekunden: " << std::flush; unsigned int sec = 0; std::cin >> sec; sec += days * 86400 + hours * 3600 + min * 60; std::system("cls"); std::cout << "Countdown gestartet!" << std::endl; for (; sec > 0; --sec) { std::cout << sec << std::endl; time_wait(1); std::system("cls"); } std::cout << "BOOM!" << std::endl; std::cin.get(); }...
-
Also ich habe schon lange kein Konsolenprogramm mehr geschrieben, aber versuche es mal mit "gotoxy(x,y)".
Bei jedem Anzeigen des neuen Wertes (Zeit) schreibt er den Wert in die Zeile die du ihm angibst, eben mit "gotoxy(x,y)".
Beispiel: gotoxy(10,20)
Somit müsste sich auch der alte Wert überschreiben und "weg" sein.

-
Des weiteren ist "wait()" keine gute idee. probiere es lieber mit clocks, willst du wissen wie?
-
Hallo !
printf ("\r%d\n",n);
oder
cout << '\r' << n;

-
also ich hatte immer "cout" verwendet
-
Zugangsdaten vergessen schrieb:
also ich hatte immer "cout" verwendet

-
Hi, da system("cls") auch Systemabhängig ist, würde ich folgende Sache nutzen:
#include <windows.h> HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD xy; xy.X = 0; // X Coord xy.Y = 0; // Y Coord :p SetConsoleCursorPosition(stdOut,xy);Gruß Chris
-
@Foxx90
Ganz ehrlich, ich verstehe deinen Code nicht ganz, erkläre doch bitte mal.
-
Foxx90 schrieb:
Hi, da system("cls") auch Systemabhängig ist, würde ich folgende Sache nutzen:
#include <windows.h> HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD xy; xy.X = 0; // X Coord xy.Y = 0; // Y Coord :p SetConsoleCursorPosition(stdOut,xy);Gruß Chris
Der obige Quellcode ist echt top portabel du.
MUAHUAHUAHUAHUA
-
Top Portabilität schrieb:
Der obige Quellcode ist echt top portabel du.
MUAHUAHUAHUAHUA
Ich verstand das eher so: Weil system( "cls" ) schon unportabel ist, wieso nicht noch weiteren unportablen Code verwenden?!
-
@ David_pb:
Ganz genau! system("cls"); ist schon unportabel außerdem ist doch besser systemcalls zu vermeiden odeR ?Also
@Zugangsdaten vergessen :#include <windows.h> //<- Header HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE); //<- Hier bekommt man ein entsprechendes Handle COORD xy; // Instanz von der Struktur COORD // SO bis hierhin ist erstmal die "Initialisierung" /* Hier füllt man das Struct (x und y) */ 1. xy.X = 0; // X Coord 2. xy.Y = 0; // Y Coord :p /* So und erst hier wirds interesant :p */ /* Hier wird der Cursor auf xy.X und xy.Y gesetzt */ 3. SetConsoleCursorPosition(stdOut,xy); /* Wenn du z.B. hiernach cout benutzt, schreibt cout ab diesen Coords los ;) */ /* So, wenn du immer wieder den Cursor setzen willst musst die S chritte 1-3 immer in einer Schleife ausführen, und in deinem Fall immer die selben Werte bei xy.X und xy.Y*/Gruß Chris
ps: Probiers einfach aus.. is ansich nich so schwer

-
außerdem ist doch besser systemcalls zu vermeiden odeR ?
hmm ja ... weißt du warum?
1. Weil du damit Zeit verlierst (Programm muss erst geöffnet werden!), da "cls" ein Programm ist.
2. Weil man etwas anderes als "cls" registriert habe könnte und das zu unvorhersehbaren Ergebnissen führt!