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膰 ?
Wyj艣cie z p臋tli przez wci艣ni臋cie klawisza w C++
Rozpocz臋ty przez
macsurf
, 21 sty 2014 20:06
4 odpowiedzi w tym temacie
#1
Napisano 21 stycznia 2014 - 20:06
#2
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
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臋:
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]
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膮
#4
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
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
- - - 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