Funkcja sprawdzająca "wciśnięcie klawisza"

Funkcja sprawdzająca "wciśnięcie klawisza"
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam, mam mały problem.
Chcę się doradzić jak w c++ sprawdzić czy dany klawisz jest aktualnie wciskany ("zapadnięty :) ") - nie, że odczytuje jaki klawisz został wciśnięty i tyle ale żeby do zmiennej "klawisz" przypisywany był aktualnie wciskany klawisz. Jeżeli nasza ręka nie dotyka klawiatury to wiadomo zmienna jest pusta. Mam nadzieję, że ktoś zrozumie moje przesłanie :)
Proszę bardzo o na kierunkowanie mnie w jaki sposób to rozwiązać. Z góry dziękuje bardzo.

SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Hm znak (klawisz) wczytuje się funkcją getchar(), można by w jakieś "nieskończonej pętli" przypisywać go do zmiennej (np znak=getchar();), wcześniej ją "zerując", generalnie zmienna nie może nie mieć wartości (ma ją nawet po deklaracji, tyle że losową zanim nadasz jej jakąś wartość). Napisz może co dokładnie chcesz osiągnąć.

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

Funkcja kbhit( ) z biblioteki conio.h, albo jak pracujesz na linuxie to biblioteka ncurses

  • Rejestracja: dni
  • Ostatnio: dni
0

Robię program do sterowania silnikami przez port LTP, napisałem funkcje która uruchamia mi te silniki ale potrzebuje nimi sterować w "czasie rzeczywistym".
Potrzebuje teraz zrobić coś takiego:

Kopiuj
if(a_jest_wcisniete)
{
        ustaw_port_lewo();   // i działaj dopóki klawisz jest wciśnięty (silnik się kręci)
}
zeruj_port();   // puszczam klawisz i się nie kręci 

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

Biblioteka conio.h ( zaraz zostanę zbesztany, że nie pokazuję Ci przykładu na NCurses )

Kopiuj
if( kbhit( ) )
     key = getch( );
     if( key == 'a' )
          ustaw_por_lewo( );
zeruj_port( );
  • Rejestracja: dni
  • Ostatnio: dni
0
MJay napisał(a)

Biblioteka conio.h ( zaraz zostanę zbesztany, że nie pokazuję Ci przykładu na NCurses )

Kopiuj
if( kbhit( ) )
     key = getch( );
     if( key == 'a' )
          ustaw_por_lewo( );
zeruj_port( );
Kopiuj
 
char key;
if( kbhit( ) )
{
     key = getch( );
     if( key == 'a' )
     {
          set_port_lewo( );
          std::cout<<"ustawiono w lewo";
          }

}   
system("pause");  
}

Wielkie dzięki, nie wiem dlaczego mi nie działa program od razu przechodzi do system("pause");

Sarrus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2512
0

Bo kbhit nie czeka na klawisz tylko sprawdza czy jest dostępny w buforze.

MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

Tak jak sarrus powiedział, zrób to w pętli i dla jakiejś wartości key po prostu wpisz break;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.