Skocz do zawarto艣ci

Witaj!

Zaloguj lub Zarejestruj si臋 aby uzyska膰 pe艂ny dost臋p do forum.

Zdj臋cie
- - - - -

Wyj艣cie z p臋tli przez wci艣ni臋cie klawisza w C++


  • Zaloguj si臋, aby doda膰 odpowied藕
4 odpowiedzi w tym temacie

#1 macsurf

macsurf
  • 104 post贸w
  • Sk膮dKo艂obrzeg

Napisano 21 stycznia 2014 - 20:06

No w艂a艣nie jak ? getchar() czy cin zawsze czekaj膮 na wci艣ni臋cie jakiego艣 znaku. A tu ma przerwa膰 p臋tle po wci艣ni臋ciu danego klawisza. To sam nie wiem, mo偶e trzeba nowy w膮tek stworzy膰 ?

#2 TomBlack

TomBlack
  • 129 post贸w

Napisano 22 stycznia 2014 - 02:29

#include iostream #include conio.h using namespace std; int main() { while (1) { if (kbhit()) break; } return 0; } To jedyna opcja jak膮 pami臋tam z zaj臋膰 na uczelni. Chocia偶 nie jestem pewien czy w c++ istnieje co艣 takiego jak klawiatura. Wydaje mi si臋, 偶e jest to z g贸ry okre艣lone. Powy偶szy kod korzysta z nieko艅cz膮cej si臋 p臋tli - dopiero po wci艣ni臋ciu jakiegokolwiek klawisza ubijasz p臋tle.

#3 pmarek77

pmarek77
  • 2 post贸w
  • Sk膮dKleczew, Poland

Napisano 22 stycznia 2014 - 12:03

kbhit() sprawdza czy w buforze jest jaki艣 znak, je偶eli np. przed wej艣ciem w p臋tle wci艣ni臋to znak specjalny (chyba 0 + znak) to od razu wyjdzie z p臋tli.
Warto oczy艣ci膰 bufor klawiatury przed wej艣ciem we w艂a艣ciw膮 p臋tl臋:
while( kbhit() )
{
  znak = getch();
}

Tutaj inny przyk艂ad, kt贸ry co prawda nie czy艣ci buforu, ale czeka na klawisz 'ESC'
[url=http://cpp0x.pl/kursy/Kurs-C++/Obsluga-klawiatury-za-pomoca-conio-h/320][lekcja] Obs艂uga klawiatury za pomoc膮 | Kurs C++[/url]

#4 macsurf

macsurf
  • 104 post贸w
  • Sk膮dKo艂obrzeg

Napisano 22 stycznia 2014 - 15:47

Z kbhit mozna to zrobic jak sie koduje pod winde/ms-dos. Tutaj w bibliotece standardowej nie ma takiej funkcji. Mo偶na j膮 samemu napisa膰 operuj膮c na innych bibliotekach kt贸re wchodz膮 w ustawienia konsoli - w to sie jeszcze nie bawi艂em. P贸ki co zrobi艂em drugi w膮tek dla funkcji kt贸ra monitoruje czy zosta艂 wci艣ni臋ty jaki艣 klawisz ale jeszcze kodu nie daj臋 bo nie dzia艂a tak jak powinno :) Jak wszystko b臋dzie ok wrzuc臋 przyk艂adowy kod.

#5 macsurf

macsurf
  • 104 post贸w
  • Sk膮dKo艂obrzeg

Napisano 22 stycznia 2014 - 18:22

No c贸偶 po dodaniu drugiego w膮tku dla przechwycenia znaku i tak zawsze musz臋 wciska膰 ENTER, taki urok getchar() z tego co wiem to trzeba kombinowac z biblioteka ncurses :(

- - - Po艂膮czono posty - - -

Dobra sprawa rozwi膮zana, trzeba napisa膰 sobie samemu funkcj臋 getch() wykorzystuj膮c funkcje do ustawiania parametr贸w terminala ( deklaracje funkcji znajduj膮 si臋 w termios.h ). Zapisujemy stare ustawienia terminala, ustawiamy tymczasowe wy艂膮czaj膮c buforowanie. Na ko艅cu tresci naszej funkcji getch() po wywo艂aniu w niej getchar() przywracamy stare ustawienia terminala. Samo getchar() na nowych ustawieniach nie b臋dzie czeka膰 na znak ENTERa ! dlatego po wywo艂aniu przywracamy stare ustawienia aby poza funkcj膮 getch(), getchar() zachowywa艂a si臋 w spos贸b standardowy :)




U偶ytkownicy przegl膮daj膮cy ten temat: 2

0 u偶ytkownik贸w, 2 go艣ci, 0 anonimowych