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? ;)

FAQ

6 komentarzy

Zaznaczasz, że "pause" to polecenie systemowe, ale przy "std::cin.sync()" nie piszesz, że to nie zadziała w linuksach...

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

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).

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...

@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ę.

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