piterx Napisano Styczeń 13, 2005 Zgłoszenie Share Napisano Styczeń 13, 2005 Hey, wie ktos jak sie nazywaja i jak sie uzywa funkcje w C wykonujace (w trybie textowym ); :?: przy nacisnieciu wybranego klawisza program od razu cos robi konkretnego (tzn nie trzeba wciskac entera tylko np '1' i juz chodzi) :?: czysci ekran :?: losowo wybiera jakies dane (stringi czy liczby) dzieki za info Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
roback Napisano Styczeń 13, 2005 Zgłoszenie Share Napisano Styczeń 13, 2005 http://www.macdonald.egate.net/CompSci/hkeyinp3.html [urlhttp://www.eskimo.com/~scs/C-faq/q19.4.html[/url] oraz http://sources.redhat.com/ml/cygwin/1997-1...2/msg00552.html man 3 rand A poza tym google.pl u Ciebie biedaku nie działa, tak? Czy może po prostu łatwiej zapytać na forum i czekać na gotowe? Trochę powagi, bo Twoje pytania są rażąco banalne do rozwikłania jak się poszuka w sieci odpowiedzi. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
piterx Napisano Styczeń 13, 2005 Autor Zgłoszenie Share Napisano Styczeń 13, 2005 Sorry, myslałem ze mozna tutaj spytac sie o proste rzeczy Google mi dziala, a mysle ze ten temat nie tylko mi sie przyda. No ale coz , dzieki i tak Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
perbeatus Napisano Styczeń 14, 2005 Zgłoszenie Share Napisano Styczeń 14, 2005 joł To pod linem nie jest takie proste ale jak znasz się na programowaniu to powinieneś zczaić. Napisze generalnie i wkleje programik który tak działa, sobie przeanalizujesz kod. Generalnie aby (_linuks_ → Linux) ORT wykonywał coś zaraz po naciśnięci klawisz trzeba zmienić tryb konsoli z canonical na non-canonical. Uzykuje się to dzięki strukturze termios załączonej w <termios.h> Nie wiem czy jest sens tłumaczyć ci tutaj o co chodzi... powiem tak tryb canonical jest domyślnym trybem konsoli, zaś w non-canonical możesz sobie ustawiać takie rzeczy jak to że gdy uzytkownik zostanie poproszony o wpisanie czegoś to program np. wczyta tylko 1 literkę albo 2 albo 3, albo że poczeka 3 sek i jak nic nie wpiszesz to też poleci dalej. A do funkcji clear <term.h> Dość skomplikowane to jest. Jeśli znasz angielski polecam książkę "Wrox Press - Beginning Linux Programming - 3rd Edition - 2004" (tytuł podaje w ten sposób żeby ci było łatwiej szukać w "księgarni" Sposób który tu zamiezam nie jest najłatwiejszy ale ma tą przewagę że działa nawet na UNIX'ach Jeśli chcesz łatwiej zainteresuj się biblioteką curses (tak przy okazji jeśli korzystasz z nowyego gcc to przy kompilacji musisz zrobić tak #g++ -o menu menu.cc -lcurses ) KOD# #include <iostream> #include <stdlib.h> #include <unistd.h> #include <termios.h> #include <term.h> using namespace std; char *menu[] = { "Wybierz opcję:", "h - hello", "j - joł", "q - papa", NULL }; //======================================================================================= int wybor(char *m[]) { char **wsk; wsk = m; int selected = 0, choose = 0; while(*wsk) { cout << *wsk << endl; wsk++; } selected = getchar(); wsk = m; while(*wsk) { if(*wsk[0] == selected) choose = 1; wsk++; } if(choose == 1) return selected; else return -1; } //==============MAIN===================================================================== int main(int argc, char *argv[]) { int choice = 0; struct termios cti, nti; tcgetattr(1, &cti); //pobiera aktualne ustawienia konsoli bo jak ich potem nie przywrócisz to zostajesz z tym co ustawiłeś nti = cti; nti.c_lflag &= ~ICANON; //tu ustawia tryb na non-canonical nti.c_lflag &= ~ECHO; //wyłącza echo czyli nie zobaczysz co wpisałeś ale inne rzeczy tak nti.c_cc[VMIN] = 1; //pobierze jeden znak nti.c_cc[VTIME] = 0; //czas nieograniczony tcsetattr(1, TCSANOW, &nti);//ustawia nowe atrybuty konsoli do { choice = wybor(menu); if(choice == -1) cout << "Wybrałeś nieistniejącą opcję." << endl; else { //do tych funkcji jest potrzebny <term.h> opis każdej z nich znajdziesz w man funkcja. setupterm(NULL, 1, NULL); char *escape_sequ; escape_sequ = tigetstr("clear"); putp(escape_sequ); char *position = tigetstr("cup"); escape_sequ = tparm(position, 10, 10); putp(escape_sequ); if(choice == 'h') cout << "Hello!" << endl << endl << endl; if(choice == 'j') cout << "JOŁ!" << endl << endl << endl; } }while(choice != 'q'); tcsetattr(1, TCSANOW, &cti); exit(0); } //======================================================================================= Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
piterx Napisano Styczeń 14, 2005 Autor Zgłoszenie Share Napisano Styczeń 14, 2005 Dzieki Wielkie ! Nie oczekiwałem az tak rozbudowanej odpowiedzi. Pisałeś w C++ , nie bede mial chyba problemow w zwyklym C. zabieram sie za pisanie ... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
lszk Napisano Marzec 19, 2005 Zgłoszenie Share Napisano Marzec 19, 2005 A mógłbyś mi napisać, dlaczego przy próbie kompilacji dostaje coś takiego? /tmp/cca2QF7g.o(.text+0x268): In function `main': : undefined reference to `setupterm' /tmp/cca2QF7g.o(.text+0x278): In function `main': : undefined reference to `tigetstr' /tmp/cca2QF7g.o(.text+0x28f): In function `main': : undefined reference to `putp' /tmp/cca2QF7g.o(.text+0x29f): In function `main': : undefined reference to `tigetstr' /tmp/cca2QF7g.o(.text+0x2ba): In function `main': : undefined reference to `tparm' /tmp/cca2QF7g.o(.text+0x2d1): In function `main': : undefined reference to `putp' collect2: ld returned 1 exit status Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
perbeatus Napisano Marzec 20, 2005 Zgłoszenie Share Napisano Marzec 20, 2005 heja Iszk, problemy są dlatego że ja to kompiluje pod Debianem ale errory dotyczą braku nagłówka term.h. Możliwe że pod fedorką jest w innym katalogu. Pozdro Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
KozaK Napisano Marzec 20, 2005 Zgłoszenie Share Napisano Marzec 20, 2005 Witam. Ja również próbowałem skompilować ten kod i też sie to nie udało. errory dotyczą braku nagłówka term.h. Możliwe że pod fedorką jest w innym katalogu. Po krótkich poszukiwaniach pliku term.h uzyskałem następujący rezultat: |13:50:12|~/cpp>find /usr -name "term.h" /usr/include/ncurses/term.h /usr/include/ncursesw/term.h /usr/include/term.h Niestety bez względu na to który z tych plików nagłówkowych wstawię do programu, to rezultat jest taki sam jak u lszk. Z tego wynika, że powód jest jednak inny. Pozdrawiam. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
perbeatus Napisano Marzec 24, 2005 Zgłoszenie Share Napisano Marzec 24, 2005 Panowie, no co mi pozostaje? To jest właśnie jedna z wad Linuksa. Brak pełnej kombatybiloności między dystrybucjami. Rózne biblioteki w różnych wersjach itp. Z tego powodu powstają właśnie takie biblioteki jak ncurses, które ujednolicają pewne rzeczy. Powiem tak. Program ten mozna napisac dużo prościej właśnie wykorzystując ncurses, jeśli natomiast ktoś bardzo chce się przekonac iż ten programik działa musi go skompilowac pod Debianem.... No trudno, to właśnie jesen z powodów dla których tak ciężko o dobre programy pod linuksa.... No ale to zaczyna się zmieniac Pozdrawiam [EDIT] Przetestowałem na Knoppix'sie 3.6 i kod przekopiowany z postu działa, ale coś przy okazji przyszło mi do głowy. Jeśłi dodajecie -lcurses i wysakuje wam taki błąd (ja zapomniałem i włąśnie taki mi wyskoczył) spróbujcie z -lncurses. Zrobie sobie miejsce na dysku i zainstaluje sobie ta Ggabajtożerną Fedorę i wam powiem dokładnie co jest Pozdrawiam raz jeszcze. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się