Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem ze wstrzymaniem programu

Ostatnio zmodyfikowano 2012-09-10 14:08
Autor Wiadomość
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.
P-64564
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.html



EDIT:
Skompilował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 :)

C/C++
for( int licz = 0; licz < 4; licz++ )
{
    std::cout << "| " << static_cast < char >( i ) << "==" << i++ << " | ";
    if( i % 128 == 0 )
         getchar();
   
}
Przeanalizuj sobie to :)
P-64565
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.
P-64757
1 « 2 »
Poprzednia strona Strona 2 z 2