Ausgabe nur für bestimmte Zeit
-
Hallo zusammen
Erstmal vorweg: Ich habe noch nicht so viel Erfahrung mit dem C++ programmieren. Ich habe zwar an der Uni einen Kurs dazu besucht, da wurden aber nur die absoluten Grundlagen erklärt und das liegt auch schon über ein halbes Jahr zurück.
Zum Problem: Folgendes habe ich programmiert:
#include <cstdlib> #include <iostream> int main() { //Anzahl Zahlen, die ausgegeben werden sollen std::cout<<"n=?"; unsigned int n; std::cin>>n; //Zufallsgenerator "ansähen" :-) srand((unsigned)time(0)); //Initialisieren eines Arrays mit n Zufallszahlen unsigned int *randomarray=new unsigned int [n]; for(unsigned int i=0;i<n;++i) { int random_integer = rand()%100+10; randomarray[i]=random_integer; } //hier möchte ich alle Zahlen aus randomarray ausgeben und zwar für 1 Sekunde. Danach soll die Zahl wieder verschwinden. for (unsigned int i=0; i<n;++i) { std::cout<< randomarray [i]; } delete [] randomarray; }
Ich möchte, dass an der angezeigten Stelle die Zahl zwar ausgegeben wird, aber nur für kurze Zeit. Danach soll sie wieder verschwinden. Leider habe ich keine Ahnung wie ich das bewerkstelligen soll und hoffe nun auf Unterstützung von euch.
-
Okay, erstmal: Zahlen oder Zahl?
Wenn du das Array Dumpen willst, dann geht das so:Erstmal oben die Header
<ctime>
und<algorithm>
einbinden.Dann füge bei dir ein:
std::copy(random, //Von *random (inklusive) random + n, //Bis random[n] (exklusive) std::ostream_iterator<unsigned int>(std::cout, ", "));//Ausgeben, mit ", " getrennt
Dann wirds lustig. Eine Zeit lang warten kann man auf ganz unterschiedliche Arten machen:
Mit C++11:
std::this_thread::sleep_for(std::chrono::seconds(1));
Mit der WinAPI: (braucht Header
<Windows.h>
bzw.<windows.h>
Sleep(1000);//In Millisekunden
Mit Boost, auch wenn ich darauf jetzt keine Lust habe, und mit den C-Standardbibliotheks-Funktionen:
{ clock_t t = clock(); while(clock() - t < CLOCKS_PER_SEC);//Nicht schön! }
Dann wieder löschen, das geht mit einem Trick:
for(short a = 0;a < 1000;++a) std::cout << "\b \b";
Ich kann mich erinnern, dass das auch noch eleganter ging mit dem Löschen, irgendso eine Funktion.... Kann mich aber nicht mehr erinnern.
-
Hallo Sone
Merci vielmals für die schnelle Antwort. Leider funktioniert bei mir das Ganze nicht wirklich. Ich habe also folgenden Code:
#include <cstdlib> #include <iostream> int main() { //Anzahl Zahlen, die ausgegeben werden sollen std::cout<<"n=?"; unsigned int n; std::cin>>n; //Zufallsgenerator "ansähen" :-) srand((unsigned)time(0)); unsigned int *randomarray=new unsigned int [n]; //Initialisieren eines Arrays mit n Zufallszahlen for(unsigned int i=0;i<n;++i) { int random_integer = rand()%100+10; randomarray[i]=random_integer; } //Alle Zahlen sollen ausgegeben werden und danach wieder verschwinden std::copy(randomarray, randomarray + n, std::ostream_iterator<unsigned int>(std::cout, ", ")); { clock_t t = clock(); while(clock() - t < CLOCKS_PER_SEC);//Nicht schön! } for(short a = 0;a < 1000;++a) std::cout << "\b \b"; delete [] randomarray; }
Wenn ich das Program laufen lasse, dann mag der Compiler schon die Ausgabe des Arrays nicht. Er meint: 'ostream_iterator' is not a member of 'std' und expected primary expression before 'unsigned'.
Wenn ich das aber ersetze mit meiner Schlaufenvariante (siehe erster Beitrag) dann gibt es bei der Ausgabe zwar eine Sekunde Pause, aber nichts verschwindet, wenn ich das Program in der Konsole aufrufe. Was ist da falsch?
-
Du musst noch
<algorithm>
und<iterator>
einbinden!Das funktioniert:
#include <algorithm> #include <ctime> #include <iostream> #include <iterator> int main() { unsigned int n; std::cin>>n; srand(time(0)); unsigned int *randomarray=new unsigned int [n]; for(unsigned int i=0;i<n;++i) randomarray[i] = rand()%100+10; std::copy(randomarray, randomarray + n, std::ostream_iterator<unsigned int>(std::cout, ", ")); { clock_t t = clock(); while(clock() - t < CLOCKS_PER_SEC);//Nicht schön! } for(short a = 0;a < 1000;++a) std::cout << "\b \b"; delete [] randomarray; }
-
Ok. Merci. Ich habe mal deinen Code so kopiert und laufen lassen. Das Problem ist jetzt, dass die Zahlen gar nie erscheinen. Nachdem ich die Länge des Arrays (n) eingetippt habe, gibt es einfach eine Sekunde Pause und dann ist der Spuk vorbei...
-
Rungo schrieb:
Ok. Merci. Ich habe mal deinen Code so kopiert und laufen lassen. Das Problem ist jetzt, dass die Zahlen gar nie erscheinen. Nachdem ich die Länge des Arrays (n) eingetippt habe, gibt es einfach eine Sekunde Pause und dann ist der Spuk vorbei...
???
Bei mir funktioniert das wunderbar.
Welche Zahl gibst du ein?
-
@Rungo: probiers mal mit
std::cout.flush();
in Zeile 19, also nach std::copy...
-
Dobi schrieb:
@Rungo: probiers mal mit
std::cout.flush();
in Zeile 19, also nach std::copy...
Oh ja, daran könnte es liegen.
-
Hallo Sone, hallo Dobi
Super! Klappt alles wunderbar. Vielen Dank für die superschnelle und tolle Hilfe!
Liebe Grüsse
Rungo