problem ze wstrzymaniem programu
Ostatnio zmodyfikowano 2012-09-10 14:08
marichuan Temat założony przez niniejszego użytkownika |
» 2012-09-08 00:33:35 Dzięki akwes za podpowiedź, ale zapomniałem dodać, że programuję (szumnie powiedziane :-)) w systemie mac osx w programie pod nazwą Xcode więc na niewiele się to zda, ponieważ już próbowałem z conio.h. Kompilator mi wyrzucił, że nie zna takiego pliku nagłówkowego. Jak widać w moim kodzie skorzystałem z funkcji getchar() zdawałoby się odpowiedniej dla tego systemu, ale oczywiście program wstrzymuje się po pierwszych 24 kolumnach, natomiast gdy naciśnie się klawisz trzeba już tak naciskać po każdej kolumnie a nie tak jak sobie założyłem co 24 kolumny. Jeśli chodzi o rzutowanie to zastosowałem taką metodę ponieważ takową znalazłem w kursie programowania c++ i autor stanowczo odradzał stosowanie innych metod dopóki ta ze static_cast działa prawidłowo. Jestem wybitnie początkującym programistą (czytaj: "stawiającym pierwsze kroki w tym temacie") więc staram się polegać na doświadczeniu niewątpliwie mądrzejszych ode mnie. Proszę jeszcze raz o rozpatrzenie mojego problemu i jakieś sugestie. Z góry dziękuję i pozdrawiam. |
|
akwes |
» 2012-09-08 01:16:30 http://4programmers.net/C/Faq/W%C5%82asna_implementacja_funkcji_getch()Hm ;> ? Ogólnie programy konsolowe nie powinny być zatrzymywane. Często taką funkcjonalność wprowadza polecenie systemowe w stylu "more", które dzieli standardowe wyjście na "strony". Na pewnym forum ładnie to ktoś ujął na temat standardowego getch() nie ma takiej funkcji. Standard zakłada że standardowe wejście jest buforowane, a "niestandardowe" wejście jest niezgodne ze stanadardem. Skorzystaj z funkcji właściwej dla swojego OS, ew. "opakuj" ją we własną funkcję.
|
Funkcja getch() w ogóle nie pracuje na standardowym wejściu, lecz na urządzeniu terminala (nazwijmy to tak). Pojęcie terminala nie istnieje w standardzie, tam istnieją tylko standardowe strumienie, które są buforowane liniowo (z wyjątkiem cerr, które nie jest buforowane). Dlatego jeśli koniecznie zależy ci na czytaniu z terminala, musisz korzystać z niestandardowych rozwiązań, które dostarcza ci dana platforma. Podobnie jak stanard nie dostarcza ci funkcji do robienia GUI i też musisz korzystać z jakiejś niestandardowej biblioteki.
|
natomiast gdy naciśnie się klawisz trzeba już tak naciskać po każdej kolumnie |
Nie wiem czy cin.ignore() czegoś by nie załatwiał... yyy w każdym razie, najlepszym wyjściem by było skorzystać z ncurses :) http://developer.apple.com/library/Mac/#documentation/Darwin /Reference/ManPages/man3/ncurses.3x.htmlSkompilowałem sobie Twój program bo coś mi nie pasowało z tym niedziałającym getchar(). Jakby zamienić go na getch() to program dalej nie działa tak jak chcesz ;> Pewnie dlatego, że warunek jest zły :) |
for( int licz = 0; licz < 4; licz++ ) { std::cout << "| " << static_cast < char >( i ) << "==" << i++ << " | "; if( i % 128 == 0 ) getchar(); }
Przeanalizuj sobie to :) |
|
marichuan Temat założony przez niniejszego użytkownika |
» 2012-09-10 14:08:25 Akwes dziękuję ci bardzo. Jasne, że warunek był błędny. Teraz program działa tak jak tego chciałem. Swoją droga jakie wszystko wydaje się proste jak już ktoś zwróci ci uwagę gdzie jest błąd :-) . Dzięki wielkie za pomoc. |
|
1 « 2 » |