Strona 1 z 1

Debian a funkcja getch()

: 26 grudnia 2014, 00:50
autor: cyryl19955
Witam na samym początku chciałbym zaznaczyć że jestem świadom tego, że ten wątek był poruszany. Jestem początkujący jeżeli idzie o C++ a tym bardziej o linux'a. Próbowałem na wszystkie sposoby getchar, putchar, różne biblioteki ncourses itp.. i dalej mój problem nie został rozwiązany. Chodzi mi o odpowiednik funkcji getch() który po wciśnięciu klawisza bez zatwierdzania go enterem będzie reagował na polecenie. Jakiś pomysł?

: 26 grudnia 2014, 12:21
autor: dedito

: 26 grudnia 2014, 17:10
autor: cyryl19955
Zastosowalem ten kod i teraz nie wazne co wcisne i tak instrukcja if mi sie nie chce wykonac, tylko else.

Kod: Zaznacz cały

 #include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch( ) {
  struct termios oldt,
  newt;
  int ch;
  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}


Potem w main...
int ch;
mygetch();
if(ch==111) // jezeli zostanie wcisniete "P" to wykonaj instrukcje

else
cout<<"Wcisnieto zly klawisz!";
.
.
.
Dodane:
Dodalem jeszcze po wywolaniu funkcji getch cout<<ch i nie wazne co wcisne to pokazuje 0. Przepraszam ze napisalem 2 posty zamiast edytowac ale nie moge znalesc funkcji usun post..

: 26 grudnia 2014, 18:56
autor: dedito
Jest coś takiego jak edycja wiadomości.

Zadeklarowałeś ch lecz nigdzie nie wpisujesz do niej wyniku jaki zwraca funkcja mygetch.
Wywołujesz tą funkcję ale bez zachwowania wyniku jaki zwraca.
Skoryguj wywołanie.

Kod: Zaznacz cały

zmienna = funkcja();

: 26 grudnia 2014, 18:59
autor: pj1031999
'P' ma wartość 80, a 'p' 112, skompilowałem to co tu wkleiłeś i działa... http://pastebin.com/0KuAWhE1

: 26 grudnia 2014, 19:03
autor: dedito
Skompilowałeś ale nie to co on wkleił, tylko to co sam zrobiłeś na bazie jego kodu, w sumie rozwiązałeś problem za niego.

: 26 grudnia 2014, 19:15
autor: pj1031999
Nie ogarniam, przecież funkcja jest żywcem wzięta z tego co wkleił... No chyba, że rzeczywiście nie przypisywał wyniku do zmiennej itp...

: 26 grudnia 2014, 19:17
autor: dedito
To wskaż post w którym jest ten kod z linka który zamieściłeć, bo chyba ja czegoś nie ogarniam.
Jeśli dobrze widzę to w poście nr 3 nie ma nawet pełnej funkcji main.

: 26 grudnia 2014, 19:21
autor: cyryl19955
Racja, dzieki wielkie.

: 26 grudnia 2014, 21:04
autor: pj1031999
Uczepiłeś się, w 3 poście napisał funkcję której potrzebował i tyle, koniec. Nie ustawiał wartości zmiennej na tą zwracaną przez funkcję, co każdemu może się zdarzyć. Skoro problem został rozwiązany to nie widzę sensu na dalszą dyskusję.