aspartam Temat założony przez niniejszego użytkownika |
zatrzymanie czasu » 2020-05-06 15:17:28 Witam, mam do zrobienia zadanie polegające na stworzeniu stopera, który będzie odliczał czas biegu zawodnika. Zrobiłem najprostszy możliwy licznik z użyciem funkcji if, problem jest taki, że to się cały czas odlicza i nie mam pojęcia jak sprawić, by zatrzymał się na życzenie użytkownika, bo przecież ten zawodnik musi kiedyś przestać biec...
Dodam, że jestem mniej niż początkujący i równanie kwadratowe w c++ to dla mnie duże osiągnięcie. |
|
pekfos |
» 2020-05-06 16:07:48 Nie wiadomo co tam masz. Podaj kod. |
|
aspartam Temat założony przez niniejszego użytkownika |
» 2020-05-06 16:46:11 dobra, mój licznik jednak nie działa tak, jak należy
Czy może mi ktoś napisać, jak się za to zabrać (ogólnie za zrobienie stopera) |
|
pekfos |
» 2020-05-06 17:23:18 |
|
aspartam Temat założony przez niniejszego użytkownika |
» 2020-05-07 12:48:31 Nie mam pojęcia jak to zrobić, a te zegary albo nie działają albo nie umiem ich użyć. Przeczytałem, że pomocna byłaby po prostu funkcja time, ale też nie wiem jak napisać kod z jej użyciem i na czym w ogóle to polega |
|
pekfos |
» 2020-05-07 17:02:53 Podaj kod. |
|
aspartam Temat założony przez niniejszego użytkownika |
» 2020-05-12 16:13:25 Mam coś takiego, jak sprawić, żeby to się zatrzymało? #include <iomanip> #include <iostream> #include <stdlib.h> #include <unistd.h> using namespace std;
int hours = 0; int minutes = 0; int seconds = 0;
void displayClock() { system( "clear" ); cout << setfill( ' ' ) << setw( 55 ) << " STOPER \n"; cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n"; cout << setfill( ' ' ) << setw( 29 ); cout << "| " << setfill( '0' ) << setw( 2 ) << hours << " hrs | "; cout << setfill( '0' ) << setw( 2 ) << minutes << " min | "; cout << setfill( '0' ) << setw( 2 ) << seconds << " sec |" << endl; cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n"; }
void timer() { while( true ) { displayClock(); sleep( 1 ); seconds++; if( seconds == 60 ) { minutes++; if( minutes == 60 ) { hours++; minutes = 0; } seconds = 0; } } }
int main() { timer(); return 0; }
Wiem, że można użyć thread, ale nie wiem, jak to działa i gdzie napisać te funkcję. + gdy próbuję to zrobić pojawia się taki error: #error This file requires compiler and library support for the \ ISO C++ 2011 standard. This support is currently experimental, and must be \ enabled with the -std=c++11 or -std=gnu++11 compiler options. Jak na to zaradzić? |
|
pekfos |
» 2020-05-12 17:46:17 To nie jest nawet poprawna implementacja zegara. Taki stoper będzie zawsze się spóźniać, a jak bardzo, to możesz sam zbadać używając prawdziwego zegara. time() się nada, skoro najwyraźniej nie potrzebujesz dokładności większej niż do jednej sekundy. Przeanalizuj poniższy zmodyfikowany kod: #include <iomanip> #include <iostream> #include <stdlib.h> #include <unistd.h> #include <ctime> using namespace std;
int hours = 0; int minutes = 0; int seconds = 0;
void displayClock() { system( "clear" ); cout << setfill( ' ' ) << setw( 55 ) << " STOPER \n"; cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n"; cout << setfill( ' ' ) << setw( 29 ); cout << "| " << setfill( '0' ) << setw( 2 ) << hours << " hrs | "; cout << setfill( '0' ) << setw( 2 ) << minutes << " min | "; cout << setfill( '0' ) << setw( 2 ) << seconds << " sec |" << endl; cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n"; }
void timer() { int twoj_zegar = 0; time_t start_programu = time( 0 ); while( true ) { displayClock(); cout << "Minelo sekund: " << twoj_zegar << '\n'; cout << "A tak naprawde: " << time( 0 ) - start_programu << '\n'; sleep( 1 ); seconds++; twoj_zegar++; if( seconds == 60 ) { minutes++; if( minutes == 60 ) { hours++; minutes = 0; } seconds = 0; } } }
int main() { timer(); return 0; } Normalnie do zatrzymania tego użyłoby się osobnego wątku, który czeka na blokującym IO, a potem daje sygnał do zakończenia pracy. Jako że jesteś "mniej niż początkujący", takie rozwiązanie odpada. Lepiej poczytaj o New Curses. https://stackoverflow.com/a/905101Tu masz przykład jak pobrać znak od użytkownika z maksymalnym czasem oczekiwania. Tym możesz zastąpić sleep() i użyć ewentualnego pobranego znaku do przerwania pętli. Znajdziesz w tej bibliotece też lepsze rozwiązanie do czyszczenia ekranu niż te system( "clear" ). |
|
« 1 » 2 3 |