Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

C - Dev i uruchomienie programu

Polecane posty

Mam takie moze troszke lamerskie pytanie. Kiedy pisze program w Devie mam problem z jego wyswietleniem. Wezme sztandarowy przyklad dla poczztkujacych (czyli dla mnie ;D). Pisze program wyswietlajacy jakikolwiek napis. Wszystko sie ladnie kompiluje, ale kiedy chce go uruchomic, to pojawia sie okno i od razu znika. Nie widze tresci, ale domyslam sie, ze jest tam wyswietlony dany napis :D Pytanie moje brzmi zatem jak to wstrzymac, zebym mogl zobaczyc efekt tego, co napisalem.

Szukajac po tematach podobnych problemow znalazlem cos podobnego i polecacie w nim kilka funkcji, ktore do tego sluza (z tym, ze tamten forumowicz programowal bodajze w visualu). Dla przykladu podana w tamtym temacie funkcja cin.get(); u mnie nic nie daje (albo cos zle robie).

Aha, nie dopisuje sie do tamtego tematu, jako ze jest juz dosc stary, i jako ze wszedzie powtarzane jest "jeden problem - jeden temat" :D

Z gory dzieki za pomoc.

EDIT: Juz sobie poradzilem, funkcja system("pause"), z dolaczona wczesniej biblioteka <stdlib.h> rozwiazala moj problem. Ale jesli znacie jakies alternatywy to piszcie, na pewno sie przydadza ;)

Link do komentarza
Udostępnij na innych stronach

Gwoli wyjasnienia: terminal w Windowsie zwykle okresla sie wierszem polecen, czyli to co sie otwiera gdy w Uruchom wpiszemy cmd.

Osobiscie sugeruje, by dodac odpowiedz na to pytanie do FAQ. To chyba jeden z najpopularniejszych problemow na poczatku programowania, ktorego rozwiazanie i powod (tu juz szczegolnie) sa dosc trudne do wymyslenia. IMO, rzecz jasna, ale prawie na pewno czesciej niz unresolved external symbol.

Do zizou - wszystko procz system("pause"), czyli cin.get(), getchar() itd NIE dzialaja jesli gdziekolwiek wczesniej wczytywales jakiekolwiek dane od uzytkownika poleceniem cin lub scanf(). Czemu? Otoz gdy chcesz potwierdzic wejscie naciskasz ENTER. Komputer wczytuje to co wpisales, i zapamietuje sobie ze jest wcisniety klawisz ENTER. No i gdy teraz wpisujesz getchar() czy cin.get(), polecenia te zauwazaja ze w buforze klawiatury (taka madra nazwa na obszar pamieci, gdzie trzymane sa wcisniete przyciski, ktorych jeszcze Twoj program nie wczytal) jest cos jeszcze. Wiec pobiera tego ENTERa, i program wykonuje sie dalej. By sobie z tym poradzic musisz napisac dwa polecenia z rzedu (czyli np. cin.get(); cin.get(); ) - drugie nie napotka juz nic wpisanego i bedzie czekal na reakcje uzytkownika. Oczywiscie, system("pause"); jest najwygodniejszy, ale w tym momencie pamietaj o dwoch sprawach:

a ) Jest to nieprzenosne - poki programujesz tylko na Windowsie nic Ci to nie przeszkadza, ale jesli kiedys zapragniesz sie na Linuksa, BSD, Maca czy cokolwiek innego przerzucic to rozwiazanie nie zadziala

b ) wynika z a) - jesli bedziesz kiedykolwiek startowal w jakims konkursie w rodzaju Olimpiady Informatycznej (Gimnazjalnej?), to tam rozwiazania kompilowane sa na Linuksie, wiec jesli wyslesz tam z rozpedu system("pause"); to dostaniesz 0 punktow i moze bys sie zdziwil.

Sorry, ze sie tak rozpisalem, ale uwazam, ze warto wiedziec czemu cos sie robi - szczegolnie w programowaniu, bo w tym zajeciu robienie czegos czego sie nie rozumie, tylko dlatego ze sie tak nauczylo jest BARDZO zlym pomyslem. IMO, rzecz jasna.

PS. Sorry za brak polskich znakow, ale pisze z postawionego od zera Arch Linuksa - bardzo fajny system, ale teraz nie moge zmusic go do rozpoznawania kombinacji alt+costam ;)

Link do komentarza
Udostępnij na innych stronach

To ja do powyższe wypowiedzi dodam jeszcze, że system("PAUSE") drukuje na ekran swój komunikat, co nie zawsze jest porządane.

@UP Jeśli chodzi o polskie znaki w Archu, to nie będę się rozpisywał, skoro wszystko jest wyjaśnione tu.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...