it-swarm.com.de

Verhindern, dass das Konsolenfenster in der Visual Studio C/C++ - Konsolenanwendung geschlossen wird

Dies ist wahrscheinlich eine peinliche Frage, da die Antwort zweifellos offensichtlich ist.

Ich habe Visual Studio seit Jahren verwendet, aber dies ist das erste Mal, dass ich eine 'Konsolenanwendung' entwickelt habe.

Wenn ich meine Anwendung starte, erscheint das Konsolenfenster, die Programmausgabe wird angezeigt und das Fenster wird geschlossen, wenn die Anwendung beendet wird.

Gibt es eine Möglichkeit, es offen zu halten, bis ich die Ausgabe überprüft habe, oder die Ergebnisse nach dem Schließen des Fensters anzuzeigen?

409
Martin

Wenn Sie ohne Debugging ausführen (Strg + F5), werden Sie standardmäßig dazu aufgefordert, die Eingabetaste zu drücken, um das Fenster zu schließen. Wenn Sie den Debugger verwenden möchten, sollten Sie in der letzten Zeile einen Haltepunkt setzen.

421
Tom

Klicken Sie mit der rechten Maustaste auf Ihr Projekt 

Eigenschaften> Konfigurationseigenschaften> Linker> System

Wählen Sie Console (/ SUBSYSTEM: CONSOLE) in der Option SubSystem aus oder geben Sie einfach Console in das Textfeld ein!

Versuchen Sie es jetzt ... es sollte funktionieren

187
Viraj

Hier ist ein Weg für C/C++:

#include <stdlib.h>

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

Setzen Sie dies an den Anfang Ihres Programms und WENN es auf einem Windows-System (#ifdef _WIN32) ist, erstellt es ein Makro mit dem Namen WINPAUSE. Wenn Sie Ihr Programm pausieren möchten, rufen Sie WINPAUSE; auf. Das Programm wird mit dem DOS-Befehl angehalten. Bei anderen Systemen wie Unix/Linux sollte die Konsole trotzdem beim Beenden des Programms nicht beendet werden.

43
Shaun

Gehe zu Debug-Menü -> Drücken Sie StartWithoutDebugging

25
pashaplus

Wenn Sie .NET verwenden, setzen Sie Console.ReadLine() vor dem Ende des Programms. 

Es wird auf <ENTER> warten.

20
Cheeso

versuchen Sie, getchar() aufzurufen, bevor main() zurückkehrt.

11
Magarusu

(/ SUBSYSTEM: CONSOLE) hat für meine vs2013 nicht funktioniert (ich hatte es schon).

"Ausführen ohne Debugging" ist keine Option, da ich nicht zwischen Debugging und Ausgabe wechseln möchte.

Ich endete mit

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

In qtcreator vor 2.6 verwendete Lösung. Während qt wächst, geht vs anders. Soweit ich mich erinnere, brauchten wir in vs2008 keine solchen Tricks.

10
fantastory

Hier ist eine Lösung, bei der (1) keine Codeänderungen oder Haltepunkte erforderlich sind und (2) nach Programmende angehalten wird, damit Sie alles sehen können, das gedruckt wurde. Nach F5 oder Strg + F5 wird die Wiedergabe unterbrochen. Der Hauptnachteil ist, dass unter VS2013 Express (wie getestet) keine Symbole geladen werden, so dass das Debugging sehr eingeschränkt ist.

  1. Erstellen Sie eine Batchdatei. Ich rief meinen runthenpause.bat mit folgendem Inhalt an:

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

    Die erste Zeile wird mit jedem Befehl und bis zu acht Argumenten ausgeführt. Die zweite Zeile wird ... pausieren.

  2. Öffnen Sie die Projekteigenschaften | Konfigurationseigenschaften | Debugging.

  3. Ändern Sie "Befehlsargumente" in $(TargetPath) (oder was auch immer in "Befehl" steht).
  4. Ändern Sie "Command" in den vollständigen Pfad zu runthenpause.bat.
  5. Klicken Sie auf OK.

Wenn Sie jetzt ausführen, startet runthenpause.bat Ihre Anwendung, und nachdem Ihre Anwendung beendet wurde, wird sie angehalten, damit Sie die Konsolenausgabe sehen können.

Ich werde ein Update posten, wenn ich herausfinde, wie die Symbole geladen werden. Ich habe versucht /Z7 per this aber ohne Erfolg.

7
cxw

geben Sie einfach als letzte Codezeile Folgendes ein:

system("pause");
5
RefaelJan

Drücken Sie einfach CNTRL + F5, um es in einem externen Befehlszeilenfenster zu öffnen (Visual Studio hat keine Kontrolle darüber).

Wenn dies nicht funktioniert, fügen Sie Folgendes am Ende Ihres Codes hinzu:

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

Warten Sie, bis Sie eine Taste drücken, um das Terminalfenster zu schließen, sobald der Code das Ende erreicht hat.

Wenn Sie dies an mehreren Stellen tun möchten, fügen Sie den obigen Code in eine Methode ein (z. B. private void Pause()) und rufen Sie Pause() auf, wenn ein Programm ein mögliches Ende erreicht.

2
carefulnow1

addiere “| Pause ”im Befehlsargument-Feld im Abschnitt" Debugging "in den Projekteigenschaften.

2
theambient

Verwenden Sie entweder:

  1. cin.get();

oder

  1. system("pause");

Stellen Sie sicher, dass Sie eine der beiden am Ende der Funktion main() und vor der Anweisung return angeben.

2
AAEM

Sie können Ihre ausführbare Datei über eine Eingabeaufforderung ausführen. Auf diese Weise können Sie die gesamte Ausgabe sehen. Oder Sie könnten so etwas tun:

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

return YOUR_MAIN_CODE;

auf diese Weise wird das Fenster erst geschlossen, wenn Sie Daten für die Variable a eingeben.

2
Geo

Eine etwas bessere Lösung:

atexit([] { system("PAUSE"); });

am Anfang Ihres Programms.

Pros:

  • kann std :: exit () verwenden
  • kann mehrere Rückgaben von main haben
  • sie können Ihr Programm unter dem Debugger ausführen
  • IDE-unabhängig (+ Betriebssystem unabhängig, wenn Sie den cin.sync(); cin.ignore();-Trick anstelle von system("pause"); verwenden)

Nachteile:

  • code ändern müssen
  • wird nicht für std :: terminate () angehalten
  • wird in Ihrem Programm auch außerhalb der IDE/Debugger-Sitzung ausgeführt; Sie können dies unter Windows verhindern mit:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}
1
GhassanPL

Ab Visual Studio 2017 (15.9.4) gibt es eine Option:

Tools->Options->Debugging->Automatically close the console

Das entsprechende Fragment aus der Visual Studio-Dokumentation :

Konsole beim Beenden des Debuggens automatisch schließen:

Weist Visual Studio an, die Konsole am Ende einer Debugsitzung zu schließen.

1
chronoxor

Sie können diese Option auch verwenden

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}
0

In meinem Fall habe ich dies erlebt, als ich auf der Community-Edition VS 2017 ein leeres C++ - Projekt erstellt habe. Sie müssen das Subsystem unter "Konfigurationseigenschaften" auf "Console (/ SUBSYSTEM: CONSOLE)" einstellen. 

  1. Gehen Sie auf "Ansicht" und wählen Sie "Property Manager".
  2. Klicken Sie mit der rechten Maustaste auf das Projekt/die Lösung und wählen Sie "Property". Dies öffnet eine Testeigenschaftsseite
  3. Navigiere zum Linker und wähle "System"
  4. Klicken Sie auf "SubSystem" und ein Dropdown-Menü wird angezeigt
  5. Wählen Sie "Konsole (/ SUBSYSTEM: CONSOLE)"
  6. Übernehmen und speichern
  7. Wenn Sie das nächste Mal Ihren Code mit "STRG + F5" ausführen, sollten Sie die Ausgabe sehen.
0
Stephen Haruna