Zeit-programmierung
-
Hallo,
ich habe folgendes Problem.
Ich möchte gern in C++ ein Programm schreiben das mir innerhalb einer Minute
die Anzahl der gedrückten Leertaste ausgibt.
Dabei soll er auf andere Tasten nicht reagieren wobei die Esc-Taste
das Programm abbricht.Kann mir jemand einen leitfaden geben und am besten noch die
Time - Funktion...Vielen Dank im vorraus...
Gruß Ercan
-
Zum zeitmessen empfiehlt sich ctime, ansonsten sieht der grobe Ablauf doch so aus:
- Zeit auslesen
- Auf Eingabe warte, nur Leerzeichen akzeptieren, ansonsten soll nichts passieren
- Zeit auslesen, überprüfen ob eine Minute vergangen ist, falls nein zu Schritt 2
-
Wenn du in Windows-Programierst und den Header windows.h lädst,
kannst du auch die API-Funktion "DWORD GetTickCount(void);" verwenden.
Die gibt die Zeit in Millisekunden zurück, seitdem du Windows gestarted hast.
-
Erstamls danke für die Vorschläge...
Ich habe das Programm geschrieben, leider bin ich nicht in der
Lage das Programm während der Laufzeit mit der ESC - Taste zu
beenden. Kann mir da jemand weiterhelfen?Sonstige Verbesserungsvorschläge sind auch willkommen.
#include <iostream> #include <iomanip> #include <ctime> using namespace std; long zeitdiff(void); static long maxzeit = 60; int main(void) { START: static int ctr = 1; char ch; int zeit = 0; cout <<"Taktzaehler"<<endl; cout <<"=========="<<endl; cout <<"Start mit ENTER-TASTE: "; getchar(ch); cout <<ctr<<" Takte in "<<zeit<<" Sekundenen"<<endl; zeitdiff(); while( getchar(ch) && ch != 0x33) // ch != 0x33 --> ESC (funzt nicht) { zeit += zeitdiff(); if( zeit>=maxzeit ) break; ctr ++; cout <<ctr<<" Takte in "<<zeit<<" Sekundenen"<<endl; } cout <<"60 Sekunden sind vergangen"<<endl; cout <<"Der Takt betraegt: "<<ctr<<" pro Minute"<<endl; do { cout <<"\nNochmal? (J/N): "; cin >> ch; if( ch == 'J' || ch == 'j' ) { ctr = 1; getchar(ch); goto START; } else if( ch == 'N' || ch == 'n' ) goto ENDE; }while(ch != 'J' || ch != 'j' || ch != 'N' || ch != 'n'); ENDE: return (0); } long zeitdiff() { static long sek = 0; long altsek = sek; time( &sek); return (sek - altsek); }
-
hui
ehrlich geht
getchar(ch);
bei dir? ich dachte die fkt ist als getchat(void) deklariert
also ich habe
ch = getch();
genommen.
was dein fehler ist
while( getchar(ch) && ch != 0x33) // ch != 0x33 --> ESC (funzt nicht)
kann auch nicht gehen. weil http://www.asciitable.com/
es ist nicht 0x33 ( das bedeutet es ist HEX ) in der tabelle steht 033 ( das ist oktal also im 8er system ) schreib einfach
ch != 033
hin dann dürfte es gehen. und nochwas. mach bitte keine goto. mach einfach ne funtkion
void checkezahl();
und die rufst du dann auf. ist übersichtlicherhier ein "idiotencode" den müsste jeder verstehen. bei ESC ist dann auch abbruch
char ch; int zzz = 0; do { ch = getch(); if( ch == 033) zzz = 1; cout << ch << endl; }while( zzz == 0 );
-
die ganzen GOTO brauchst du wirlich nicht. das do-while reicht aus, weil du ja solange machst wie das FLAG zzz = 0 ist. du kannst das ganze do-while in einer fkt stecken und bei deiner frage ( ja/nein ) wieder aufrufen. dann ist der code im int main auch übersichtlicher
ausserdem ist glaub
int main()
besser angebracht. einige beharren drauf.
Ps: nimm besser statt zzz
einbool ok_flag = true; // kostet dich nur 1 byte
und dann while(ok_flag) und in der schleife ok_flag = false;
-
Vielen Dank newkid,
sehr nett von dir, leider funktioniert es mit der ESC - Taste immer noch nicht.
Erst wenn ich es am Anfang betätige reagiert das Programm drauf, andernfalls
"hört" es nicht auf die Taste.
-
ähm bitte mach mal Copy und Paste von meinem Code
wenn das programm in meine sleife kommt, und dann es immer noch nicht geht, dann schmeiss deine tastatur weghab jetzt getchar nicht benutzt sondern getch ( wie du in meinem code sehen kannst )
da musst du nicht noch enter oder so drücken, sondern der liesst automatisch nur ein zeichen ein, und macht im code weiter.
probiers ruhig mal aus