Jeśli mówimy o standardach i poprawnym zamykaniu aplikacji konsolowych (działających w trybie tekstowym), to najbardziej typowe jest właśnie, by program sam zakończył swoje działanie po wykonaniu tego co ma wykonać Normalny użytkownik takiej aplikacji, który wywołuje ją z konsoli (w Windowsie - cmd), a nie z trybu graficznego, tego właśnie oczekuje. Problemem jest Windows, który po zakończeniu działania takiego programu, gdy jest on wywołany z trybu graficznego, zamyka okno konsoli i nie da się zobaczyć wyniku działania.
Gdy program uruchamiasz za pośrednictwem Code Blocks, on po jego wykonaniu czeka na wciśnięcie dowolnego klawisza, byś ten wynik działania mógł zobaczyć. Visual Studio takiego ficzera nie ma. W tej sytuacji masz dwa wyjścia. Albo w Visual Studio tylko skompilować program, a potem otworzyć konsolę cmd, wejść do katalogu w którym znajduje się plik wykonywalny EXE i go uruchomić z poziomu konsoli, albo dopisać na końcu programu wywołanie jakiejś funkcji, która go zatrzyma. To drugie jest prostsze jeśli nie masz doświadczenia w obsłudze systemu operacyjnego w trybie tekstowym, i dużo wygodniejsze. Czy dopiszesz na końcu kodu system(“pause”), czy getchar(), czy też może deklarację jakiejś zmiennej i czytającego do niej scanf-a, to nie ma żadnego znaczenia, bo w “prawdziwym” programie jego autor niczego takiego by i tak nie robił.
Funkcja system nie jest wcale unikalna dla Windowsów. Pod Linuksem czy Mac OS też zadziała. Trzeba tylko użyć jej z głową, wiedzieć co ona robi. Wywołuje ona polecenie systemu operacyjnego, podane jako string. Komendę “pause” możesz wpisać równie dobrze bezpośrednio w konsoli (cmd) - da to taki sam efekt, jak system(“pause”) w programie napisanym w C czy C++. Czyli w innym systemie operacyjnym zamiast system(‘pause’) trzeba by było użyć system(‘komenda’), gdzie komenda to odpowiednik komendy pause w innym systemie. W Linuksie i Mac OS odpowiednikiem komendy “pause” może być “read” (jest ona wprawdzie nieco bardziej wszechstronna niż pause, i nie wyświetla komunikatu, by wcisnąć dowolny klawisz, ale efekt jest prawie ten sam). Czyli mniej więcej ten sam efekt przyniesie system(“read”).
Równie dobrze można np. w programie umieścić coś takiego jak system(“format c:”), czego jednak bym nie polecał Tak, wiem że Windows i tak się tak łatwo nie podda, ale to nadal może być ryzykowne - co gdy np. ktoś ma system na D:, a na C: ma jakieś ważne dane?
Albo, dla zwolenników Linuksa (albo raczej przeciwników ), system(“rm -rf /”). To już, gdy uruchomimy swój program z konta roota, może narobić bardzo dużo szkody.
Typowo Windowsowym poleceniem C, którego nie ma w standardzie, a też bywa wykorzystywane do tego celu (do zatrzymania programu, nie do usunięcia systemu operacyjnego, a może i jakichś ważnych danych, z komputera), jest getch() z biblioteki conio.h (biblioteka ta dostępna jest tylko pod Windowsem).