Zapobieganie zamknięciu okna konsoli w aplikacji konsolowej Visual Studio C / C++

Jest to prawdopodobnie embraing pytanie, jak bez wątpienia odpowiedź jest ślepo oczywiste.

Używam Visual Studio od lat, ale to pierwszy raz, kiedy robię jakiekolwiek 'Aplikacje Konsolowe' rozwoju.

Kiedy uruchamiam moją aplikację, pojawia się okno konsoli, pojawia się wyjście programu, a następnie okno zamyka się, gdy aplikacja kończy pracę.

Czy jest sposób, aby albo zachować go otwarte, dopóki nie sprawdzę wyjścia, lub wyświetlić wyniki po tym, jak okno ma zamknięte?

Author: sorin, 2009-11-21

16 answers

Jeśli uruchamiasz się bez debugowania (Ctrl+F5), domyślnie wyświetla monit o naciśnięcie klawisza return, aby zamknąć okno. Jeśli chcesz użyć debuggera, powinieneś umieścić punkt przerwania w ostatniej linii.

 392
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-21 16:00:45

Kliknij prawym przyciskiem myszy na swoim projekcie

Properties>Configuration Properties> Linker > System

Wybierz Console (/SUBSYSTEM: CONSOLE) w opcji SubSystem.

Teraz spróbuj it...it powinno działać

 163
Author: Viraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-24 06:14:30

Oto sposób na C / C++:

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

Umieść to na górze programu, a jeśli jest on w systemie Windows (#ifdef _WIN32), to utworzy makro o nazwie WINPAUSE. Gdy chcesz, aby twój program wstrzymał się, zadzwoń WINPAUSE; i zatrzyma program, używając polecenia DOS. W przypadku innych systemów, takich jak Unix/Linux, konsola nie powinna zamykać się przy wyjściu z programu.

 43
Author: Shaun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-22 15:05:40

Goto Debug Menu - > Naciśnij StartWithoutDebugging

 24
Author: pashaplus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-28 09:24:32

Jeśli używasz. Net, Umieść Console.ReadLine() przed końcem programu.

Będzie czekać <ENTER>.

 18
Author: Cheeso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-21 16:11:53

Spróbuj wywołać getchar() tuż przed powrotem main().

 11
Author: Magarusu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 17:54:39

(/SUBSYSTEM: CONSOLE) nie działał dla mojego vs2013 (już go miałem).

"Uruchom bez debugowania" nie jest opcją, ponieważ nie chcę przełączać się między debugowaniem a wyświetlaniem wyjścia.

I ended with

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

Roztwór zastosowany w qtcreator pre 2.6. Teraz, gdy qt rośnie, vs idzie w inną stronę. Jak pamiętam, w vs2008 nie potrzebowaliśmy takich sztuczek.

 10
Author: fantastory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 14:50:58

Oto rozwiązanie, które (1) nie wymaga żadnych zmian kodu ani punktów przerwania, a (2) zatrzymuje po zakończeniu programu tak, aby można było zobaczyć Wszystko, które zostało wydrukowane. Zatrzyma się po F5 lub Ctrl + F5. Głównym minusem jest to, że na VS2013 Express (jak testowany), nie ładuje symboli, więc debugowanie jest bardzo ograniczone.

  1. Utwórz plik wsadowy. Nazwałem swoją runthenpause.bat, o następującej treści:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

    Pierwsza linia będzie działać niezależnie od polecenia i do ośmiu argumentów. Druga linia będzie... pauza.

  2. Otwórz właściwości projektu | Właściwości konfiguracji / debugowanie.

  3. Zmień "argumenty polecenia" na $(TargetPath) (lub cokolwiek jest w "poleceniu").
  4. Zmień "polecenie" na pełną ścieżkę do runthenpause.bat.
  5. / Align = "left" /

Teraz, po uruchomieniu, runthenpause.bat uruchomi aplikację, a po jej zakończeniu, zatrzyma się, aby zobaczyć konsolę wyjście.

Opublikuję aktualizację, jeśli wymyślę, jak załadować symbole. Próbowałem /Z7 per to , ale bez powodzenia.

 7
Author: cxw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:50

Możesz uruchomić swój plik wykonywalny z wiersza polecenia. W ten sposób można zobaczyć wszystkie wyjścia. Albo możesz zrobić coś takiego:

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

I w ten sposób okno nie zamknie się, dopóki nie wprowadzisz danych dla zmiennej a.

 2
Author: Geo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-21 17:30:38

Dodaj "/ pause " w polu argumentów poleceń w sekcji debugowanie we właściwościach projektu.

 2
Author: theambient,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-28 20:13:26

Wystarczy nacisnąć CNTRL + F5, aby otworzyć go w zewnętrznym oknie wiersza poleceń(Visual Studio nie ma nad nim kontroli).

Jeśli to nie zadziała, Dodaj następujący kod na końcu kodu:

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

To oczekiwanie na naciśnięcie klawisza, aby zamknąć okno terminala po osiągnięciu końca kodu.

Jeśli chcesz to zrobić w wielu miejscach, umieść powyższy kod w metodzie (np. private void Pause()) i wywołaj Pause(), Gdy program osiągnie możliwy koniec.

 2
Author: carefulnow1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 10:20:16

Wpisz jako ostatnią linijkę kodu:

system("pause");
 2
Author: rafraph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-09 22:59:25

Nieco lepsze rozwiązanie:

atexit([] { system("PAUSE"); });
Na początku programu.

Plusy:

  • można użyć std::exit()
  • może mieć wiele zwrotów z main
  • możesz uruchomić swój program pod debugerem
  • IDE independent (+OS independent if you use the cin.sync(); cin.ignore(); trick zamiast system("pause");)

Wady:

  • trzeba zmodyfikować kod
  • nie zatrzymuje się na std:: terminate ()
  • nadal będzie się działo w twoim programie Na Zewnątrz z sesji IDE / debugger; można temu zapobiec w systemie Windows za pomocą:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}
 1
Author: GhassanPL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-23 20:37:34

Albo użyć:

  1. cin.get();

Lub

  1. system("pause");

Upewnij się, że któreś z nich znajduje się na końcu main() funkcji i przed return Instrukcji.

 1
Author: Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-14 23:08:19

Visual Studio 2015, z importem . Bo nienawidzę gdy przykłady kodu nie podają potrzebnych importów.

#include <iostream>;

int main()
{
    getchar();
    return 0;
}
 -2
Author: J.M.I. MADISON,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-14 02:57:54

Użyj console.readline. Twój pisze tekst, ale go nie czyta.

 -3
Author: Dallas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-20 19:14:46