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.
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ąć.
Funkcja kbhit( ) z biblioteki conio.h, albo jak pracujesz na linuxie to biblioteka ncurses
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
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( );
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");
Bo kbhit nie czeka na klawisz tylko sprawdza czy jest dostępny w buforze.
Tak jak sarrus powiedział, zrób to w pętli i dla jakiejś wartości key po prostu wpisz break;