Problem z kbhit()
Ostatnio zmodyfikowano 2015-12-12 19:40
SzymoneX300 Temat założony przez niniejszego użytkownika |
Problem z kbhit() » 2015-12-12 18:41:28 Witam, mam problem z funkcją kbhit()
Chciałem zrobić program, w formie ćwiczenia, w którym stworzyłem while'a, a wnim kolejnego while'a, który miał w sobie funkcję kbhit(). Wyglądało to mniej więcej tak:
int main{ while(x<150) { while(kbhit()==false) { cout<<x; Sleep(100); x-=5; system("cls"); } x+=15; } cout<<"Wygrywasz"; return 0; }
I powinno to działać tak, że while z kbhit() będzie co 0,1 sekundy zmniejszać x o 5, ale gdy klikniesz to do x doda 15 i znowu wróci do odejmowania od x tych 5, aż nie wyklikasz na tyle szybko, żeby x był większy od 150, ale wykonuje się tak, że za pierwszym powtórzeniem pierwszej pętli while z kbhit'em wykonuje się, kliknę coś i przy następnych powtórzeniach pierwszej pętli, pętla z kbhit'em się nie wykonuje, a wykonuje się, tylko zwiększa się x o 15, aż będzie większy lub równy 150 i pokazuje, że wygrałem. Da się coś z tym zrobić? Jak coś to proszę tylko o poprawienie kodu, nie robienia go w inny sposób od nowa, ewentualnie powiedzcie proszę, że w taki sposób nie idzie tego wykonać. |
|
mateczek |
» 2015-12-12 19:14:55 opróżnij bufor po wpisaniu znaku !!! #include <iostream> #include <conio.h> #include <windows.h>
using namespace std;
int main() { int x = 0; char znak; while( x < 150 ) { while( kbhit() == false ) { cout << x; Sleep( 100 ); x -= 5; system( "cls" ); } x += 15; znak = getch(); } cout << "Wygrywasz"; return 0; }
|
|
1aam2am1 |
» 2015-12-12 19:40:55 Źle to ogólnie zrobiłeś. Jednocześnie powinieneś móc pobrać znak z bufora i liczyć czas który minął.
1. Pętla główna działa do określonego progu. 2. W pętli patrzysz czy jest znak w buforze. Pobierasz go jeżeli istnieje i dodajesz swoją liczbę. 3. Po minięciu określonego czasu powinieneś zresetować licznik i odjąć określoną liczbę. 4. W pętli powinieneś dać małego Sleep aby pętla nie zabierała całej mocy procesora. |
|
« 1 » |