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.
Funkcja sprawdzająca "wciśnięcie klawisza"
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
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ąć.
- Rejestracja: dni
- Ostatnio: dni
Funkcja kbhit( ) z biblioteki conio.h, albo jak pracujesz na linuxie to biblioteka ncurses
- Rejestracja: dni
- Ostatnio: dni
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:
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
- Rejestracja: dni
- Ostatnio: dni
Biblioteka conio.h ( zaraz zostanę zbesztany, że nie pokazuję Ci przykładu na NCurses )
if( kbhit( ) )
key = getch( );
if( key == 'a' )
ustaw_por_lewo( );
zeruj_port( );
- Rejestracja: dni
- Ostatnio: dni
MJay napisał(a)
Biblioteka conio.h ( zaraz zostanę zbesztany, że nie pokazuję Ci przykładu na NCurses )
if( kbhit( ) )
key = getch( );
if( key == 'a' )
ustaw_por_lewo( );
zeruj_port( );
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");
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2512
Bo kbhit nie czeka na klawisz tylko sprawdza czy jest dostępny w buforze.
- Rejestracja: dni
- Ostatnio: dni
Tak jak sarrus powiedział, zrób to w pętli i dla jakiejś wartości key po prostu wpisz break;