2010-03-30 17 views
8

Jak uzyskać wejście z klawiatury, bez naciskania przycisku „powrót” w C/Mac OSGet wejście z klawiatury, bez konieczności „powrotu” w C

+2

Jest to zależne od systemu operacyjnego, więc możesz uzyskać lepsze odpowiedzi, jeśli wskażesz system operacyjny, który Cię interesuje. – Brian

+0

Dodany znacznik OS z wzmianki w treści pytania. –

+0

Wow, tekst rzeczywiście mówi Mac OS. Zupełnie tego nie zauważyłem :) – Brian

Odpowiedz

5

W systemach uniksowych z zaciskami (przypuszczam, że MacOS X kwalifikuje się), musisz ustawić terminal tak zwany tryb "cbreak". Chodzi o to, że terminal zachowuje dane do momentu naciśnięcia "return", tak że nie ma nic, co mógłby zrobić twój kod C, chyba że instruuje terminal, aby nie wykonywał takiego buforowania. Jest to często nazywane "trybem Cbreak" i obejmuje funkcję tcsetattr().

Trochę googlowania znaleziono this code co wydaje się być w porządku. Gdy terminal jest w trybie Cbreak, będziesz mógł odczytać dane, ponieważ są one dostarczane ze standardowymi połączeniami getchar() lub fgetc().

+0

Możliwe jest również wymuszenie "linii do tej pory" przez naciśnięcie Ctrl-D (a gdy zostanie zrobione na pustej linii, daje to możliwość odczytania 0 znaków, to sygnalizuje to koniec warunek pliku). – Vatine

2

Jeśli trzeba obsłużyć szczegóły siebie, użyj wariantu curses. Jeśli jest dostępna, preferuj "ncurses" zamiast "curses". Zauważ, że niektóre klawisze to klawisze "Meta", które tak naprawdę modyfikują kody kluczy podstawowych. Istnieje kilka "trybów" do czytania kluczowych danych wejściowych, od "gotowanych", przez "częściowo ugotowane", po "surowe". Każdy tryb ma swoje osobliwości, dokładnie zapoznaje się z dokumentacją.

Czasami lepiej jest używać istniejącego kodu obsługi klawisza z różnych bibliotek programowania gier, słyszałem o dobrych wynikach z wykorzystaniem kluczy SDL do skanowania. To trochę potrwa, więc być może istnieją nowsze (i lepsze) zestawy narzędzi.

Powiązane problemy