• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++ ]Jak wykryć czy użytkownik nacisnął klawisz (konsola)

Object Storage Arubacloud
0 głosów
3,040 wizyt
pytanie zadane 16 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
Nie żebym nie pamiętał, ale nie pamiętam. Pamiętam, że coś takiego kiedyś miałem, bodajże getchar. Ale teraz gdy używam getchar, to mogę jedynie coś wpisać, nie pamiętam jak się ta funkcja nazywała. Chodzi mi o to, że kiedy użytkownik naciśnie np. ESC, to program to wykryje. Liczę na szybką pomoc.
komentarz 16 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
Kiedy naciśnie? Funkcja będzie czekać na wejście, czy ma się to dziać asynchronicznie?
komentarz 16 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
Asynchronicznie czyli? Chodzi mi o to, że załóżmy mam sobie nieskończoną pętlę i czekam sobie aż użytkownik naciśnie sobie np. ESC. Użytkownik nie może wpisać ESC jako znaku, więc żadne cin'y, getline'y  czy inne nie pomogą. Funkcja ta zapisywała chyba kod ASCII naciśniętego przycisku. W przypadku ESC to chyba 27.
komentarz 16 lutego 2018 przez Kabuuz Bywalec (2,820 p.)
_kbhit()?

1 odpowiedź

+1 głos
odpowiedź 16 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 16 lutego 2018 przez Hiskiel
 
Najlepsza

Funkcja getch z conio.h zwraca kod naciśniętego klawisza bez zatwierdzania go enterem. W połączeniu z funkcją kbhit sprawdzającą, czy naciśnięto jakiś klawisz, możesz zrobić prosty asynchroniczny system zdarzeń z klawiatury.

if (kbhit())
{
	if (getch() == 27)
	{
		// ...
	}
}
komentarz 16 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
Dlaczego niby nie chce się wykonywać? Wg tego kodu program powinien wypisywać napis "Hello world!", jeśli nacisnąłeś klawisz inny niż ESC.
komentarz 16 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Jest tak jak mówisz, pętla rusza dopiero po naciśnięciu jakiegoś klawisza. Ale przecież warunek if nie jest na razie spełniony, więc powinien być pominięty (przeskoczony).
komentarz 16 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)

Ale nie zauważasz jednej podstawowej rzeczy: funkcja getch czeka na naciśnięcie klawisza.

komentarz 16 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Teraz rozumiem, działanie "stopuje" funkcja getch(), która oczekuje wprowadzenia jakiegoś znaku, dopiero w następnej kolejności jest sprawdzany warunek if.

Dlatego potrzebna jest (wcześniejsza) funkcja khbit().

Jeszcze raz dziękuję! Wybacz, że tak późno zawracam głowę.
komentarz 16 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)

Dokładnie. Funkcja kbhit jest po to, aby getch nie zatrzymywało programu.

Ja i tak siedzę do późna. Nie musisz mnie za nic przepraszać wink

Podobne pytania

0 głosów
2 odpowiedzi 1,524 wizyt
0 głosów
1 odpowiedź 800 wizyt
pytanie zadane 13 sierpnia 2018 w C i C++ przez Ogleirduwa Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 575 wizyt
pytanie zadane 6 maja 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...