Programowanie w języku C/C++ » FAQ

Zatrzymanie okna programu

Wielokrotnie pojawia się na forum pytanie: "Czemu mój program po uruchomieniu od razu się zamyka i nie mogę zobaczyć efektu?".
Odpowiedź jest prosta: bo program po zakończonej pracy się zakańcza. Jak temu zaradzić? Sposobów jest kilka:

#include <iostream>
using namespace std;
 
int main()
{ 
  //program
  cin.sync(); //kasowanie zbędnych znaków z bufora
  cin.get(); //oczekiwanie na wciśnięcie klawisza
  return 0;
}


#include <cstdio>
using namespace std;
 
int main()
{ 
  //program
  getchar(); //oczekiwanie na wciśnięcie klawisza
  return 0;
}


#include <cstdlib>
using namespace std;
 
int main()
{ 
  //program
  system("pause"); //działa tylko na windowsach!
  return 0;
}


Analogicznie można do tego wykorzystać każdą funkcję która oczekuje na wciśnięcie klawisza (getc(), getch() itd).

Innym sposobem na rozwiązanie problemu jest użycie innego IDE. Większość sensownych IDE uruchamia programy we własnej konsoli i zatrzymuje ją po zakończeniu programu. Zamiast dopisywać na końcu każdego programu dodatkowe instrukcje warto zainteresować się lepszymi środowiskami.
Środowiska które potrafią pokazać nam efekty działania programu bez zbędnych kombinacji: Code::Blocks, Visual Studio, Eclipse (i pewnie wiele innych).
Jeśli więc wciąż męczysz biednego Deva (i tym samym także siebie...) to może czas na zmiany? ;)

5 komentarzy

Xupicor 2011-01-27 20:27

Do listy IDE które same sobie radzą z utrzymaniem okna konsoli po wywołaniu programu dodać można NetBeans C/C++ IDE.

rincewind 2010-08-25 18:23

Ale jest zależne od konwencji. Program konsolowy można na przykład wywołać w skrypcie, robić pipe'y kilku programów etc. -- w takim wypadku oczekiwanie na wejście zatrzymuje wszystko. Program konsolowy z reguły bierze wejście, przetwarza je i zwraca wynik, bez interakcji z użytkownikiem (jak np. LAME -- kodek mp3 czy gcc).

olo16 2010-08-25 15:56

W takim razie mam złe przyzwyczajenia, ja zawsze odpalam dwuklikiem. A co do zadania które program ma wykonać i czy ma się od razu wyłączyć czy też nie, to nie jest to zależne bezpośrednio od interfejsu graficznego/tekstowego...

rincewind 2010-08-25 15:01

@olo16: Poza środowiskiem uruchamiasz z konsoli, a nie dwuklikiem -- tak to powinno się robić. Dwuklik jest dobry dla aplikacji okienkowych, programy konsolowe mają za zadanie zrobić swoje zadanie i zaraz potem zakończyć pracę.

olo16 2010-08-25 10:07

Co do ostatniego: A uruchamianie poza środowiskiem to pies? Skompilujesz w środowisku które zastrzymuje konsolę, ale poza środowiskiem problem pozostanie.