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?
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.
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
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.
Gehe zu Debug-Menü -> Drücken Sie StartWithoutDebugging
Wenn Sie .NET verwenden, setzen Sie Console.ReadLine()
vor dem Ende des Programms.
Es wird auf <ENTER>
warten.
versuchen Sie, getchar()
aufzurufen, bevor main()
zurückkehrt.
(/ 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.
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.
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.
Öffnen Sie die Projekteigenschaften | Konfigurationseigenschaften | Debugging.
$(TargetPath)
(oder was auch immer in "Befehl" steht).runthenpause.bat
.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.
geben Sie einfach als letzte Codezeile Folgendes ein:
system("pause");
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.
addiere “| Pause ”im Befehlsargument-Feld im Abschnitt" Debugging "in den Projekteigenschaften.
Verwenden Sie entweder:
cin.get();
oder
system("pause");
Stellen Sie sicher, dass Sie eine der beiden am Ende der Funktion main()
und vor der Anweisung return
angeben.
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.
Eine etwas bessere Lösung:
atexit([] { system("PAUSE"); });
am Anfang Ihres Programms.
Pros:
cin.sync(); cin.ignore();
-Trick anstelle von system("pause");
verwenden)Nachteile:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
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.
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;
}
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.