Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z kbhit()

Ostatnio zmodyfikowano 2015-12-12 19:40
Autor Wiadomość
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ć.
P-141833
mateczek
» 2015-12-12 19:14:55
opróżnij bufor po wpisaniu znaku !!!
C/C++
#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(); //tutaj!!!
    }
    cout << "Wygrywasz";
    return 0;
}
P-141838
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.
P-141841
« 1 »
  Strona 1 z 1