Frage

In letzter Zeit habe ich versucht, C ++ zu lernen Diese Internetseite. Leider sehe ich, wenn ich versuche, eines der Code -Beispiele auszuführen, dieses Programm etwa eine halbe Sekunde geöffnet und dann sofort schließen. Gibt es eine Möglichkeit, das Programm sofort zu schließen, damit ich die Früchte meiner Bemühungen sehen kann?

War es hilfreich?

Lösung

Bearbeiten: Wie Charles Bailey in einem Kommentar unten zu Recht betont stdin, Und es gibt wirklich keinen guten Weg, um daran zu arbeiten. Wenn Sie mit einem angeschlossenen Debugger laufen, John Diblings vorgeschlagene Lösung ist wahrscheinlich die sauberste Lösung für Ihr Problem.

Das heißt, ich werde das hier lassen und vielleicht wird es jemand anderes nützlich finden. Ich habe es beim Schreiben von Tests während der Entwicklung viel als kurzer Hack verwendet.


Am Ende deines main Funktion, Sie können aufrufen std::getchar();

Dies bekommt einen einzelnen Charakter von stdin, Sie geben Ihnen die Art von Verhalten "Drücken Sie eine Taste, um fortzusetzen" (wenn Sie tatsächlich eine "Drücken Sie eine Taste drücken" möchten, müssen Sie selbst eine drucken).

Du musst #include <cstdio> zum getchar.

Andere Tipps

Wenn Sie Visual Studio verwenden und die Konsolenanwendung aus der IDE starten:

drücken Strg-F5 (Starten Sie ohne Debuggen) Starten Sie die Anwendung und halten Sie das Konsolenfenster offen, bis Sie eine Taste drücken.

Die Lösung von James funktioniert für alle Plattformen.

Alternativ auf Windows Sie können auch die folgenden Informationen hinzufügen, kurz bevor Sie von der Rückkehr von main Funktion:

  system("pause");

Dies wird die ausführen pause Befehl, der wartet, bis Sie eine Taste drücken und auch eine schöne Nachricht anzeigen Press any key to continue . . .

Wenn Sie Microsofts Visual C ++ 2010 ausdrücken und das Problem mit treffen Strg+F5 Schauen Sie sich einen Blick darauf an, die Konsole nach Beendigung des Programms nicht offen zu halten Dieser MSDN -Thread.

Wahrscheinlich ist Ihre IDE so eingestellt, dass sie die Konsole nach einem Strg+F5 -Lauf schließen wird. Tatsächlich schließt ein "leeres Projekt" in Visual C ++ 2010 standardmäßig die Konsole. Um dies zu ändern, tun Sie, wie der Microsoft -Moderator vorgeschlagen hat:

Bitte klicken Sie mit der rechten Maustaste auf Ihren Projektnamen und wechseln Sie zu den Eigenschaften. Denn standardmäßig gibt es das leere Projekt nicht an.

Normalerweise lege ich einfach einen Haltepunkt auf main()Schließe lockige Klammer. Wenn das Ende des Programms mit jedem Mitteln erreicht wird, wird der Haltepunkt klicken und Sie können Alt-Tabs zum Konsolenfenster, um die Ausgabe anzuzeigen.

Warum nicht einfach das Programm von einer Konsole ausführen, dh das Programm von CMD.exe ausführen, wenn Sie Windows verwenden. Auf diese Weise bleibt das Fenster nach Abschluss des Programms geöffnet.

EDIT]: Wenn ich KDevelop4 verwende, gibt es eine vollwertige Instanz von Bash (eine Linux -CLI), die in einer Registerkarte am unteren Rand der IDE ausgeführt wird. Welches ist das, was ich unter solchen Umständen verwende.

Fügen Sie vor dem Ende Ihres Codes diese Zeile ein:

system("pause");

Dies hält die Konsole, bis Sie einen Schlüssel treffen.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Please enter your first name followed by a newline\n";
    cin >> s;
    cout << "Hello, " << s << '\n';
    system("pause"); // <----------------------------------
    return 0; // This return statement isn't necessary
}

Anruf cin.get(); 2 Mal:

    //...
    cin.get();
    cin.get();
    return 0
}

Wenn Sie Ihren Code von einer kompetenten IDE ausführen, wie z. Code :: Blöcke, Die IDE verwaltet die Konsole, mit der sie den Code ausführt, und hält ihn offen, wenn die Anwendung schließt. Sie möchten keinen speziellen Code hinzufügen, um die Konsole offen zu halten, da dies verhindert, dass sie ordnungsgemäß funktioniert, wenn Sie ihn außerhalb der IDE real verwenden.

Okay, ich vermute, Sie sind mit Visual Studio unter Windows ... warum? Nun, denn wenn Sie sich unter einem Linux -Betriebssystem befinden, würden Sie es wahrscheinlich aus der Konsole ausführen.

Wie auch immer, Sie können dem Ende Ihres Programms Mist hinzufügen, wie andere vorschlagen, oder Sie können einfach schlagen Strg + F5 (Beginnen Sie ohne Debuggen) und Visual Studio lässt die Konsole nach Abschluss der Konsole hoch.

Eine weitere Option, wenn Sie die Debug -Version ausführen und Ihrem Code keinen Mist hinzufügen möchten, besteht darin, das Konsolenfenster zu öffnen (Start -> Ausführen -> CMD) und zu Ihrem navigieren Debug -Ausgangsverzeichnis. Geben Sie dann einfach den Namen Ihrer ausführbaren Datei ein und es wird Ihr Debug -Programm in der Konsole ausführen. Sie können dann Visual Studios Anhang zum Prozess oder so verwenden, wenn Sie wirklich möchten.

Wenn Sie Ihre Anwendung in Visual C ++ debuggen, drücken Sie F5 oder das grüne Dreieck in der Symbolleiste. Wenn Sie es nicht wirklich debuggen (Sie haben keine Haltepunkte festgelegt), drücken Sie Strg+F5 oder wählen Sie Start, ohne die Menüs zu debugieren (es steht normalerweise im Debug -Menü, was ich zu verwirrend bin.), Es wird etwas schneller sein. Und was noch wichtiger ist, wird am Ende eine Pause einlegen, ohne dass Sie Ihren Code ändern müssen.

Öffnen Sie alternativ eine Eingabeaufforderung, navigieren Sie zum Ordner, in dem sich Ihr EXE befindet, und führen Sie sie aus, indem Sie ihren Namen eingeben. Auf diese Weise, wenn die Eingabeaufforderung ausgeführt wird, schließt es nicht und Sie können die Ausgabe sehen. Ich bevorzuge diese beiden Methoden dem Hinzufügen von Code, der die App so wie sie fertiggestellt wird.

Fügen Sie einfach am Ende Ihres Programms Folgendes hinzu. Es wird versucht, eine Form der Benutzereingabe zu erfassen, sodass die Konsole automatisch schließt.

cin.get();

Fügen Sie die folgenden Zeilen vor allen hinzu exit() Funktion oder vor einem returns in main():

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");

Für Visual Studio (und nur Visual Studio) bietet Ihnen das folgende Code -Snippet einen "Warten Sie auf die Eingabeaufforderung" TastePress ", die wirklich darauf wartet, dass der Benutzer a drückt Neu Schlüssel explizit, indem Sie zuerst den Eingangspuffer spülen:

#include <cstdio>
#include <tchar.h>
#include <conio.h>

_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();

Beachten Sie, dass dies das verwendet tchar.h Makros sind mit mehreren "Zeichensätzen" kompatibel zu sein (wie VC ++ sie nennt).

Ich mache das nur:

//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;

HINWEIS: Das Löschen des CIN -Puffers und so ist nur erforderlich, wenn Sie CIN irgendwann früher in Ihrem Programm verwendet haben. Auch die Verwendung von std :: numeric_limits :: max () ist wahrscheinlich besser als int_max, aber es ist ein bisschen wortreich und normalerweise unnötig.

Verwenden #include "stdafx.h" & system("pause"); Genau wie der Code unten.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    std::cout << "hello programmer!\n\nEnter 2 numbers: ";
    int x, y;
    std::cin >> x >> y;
    int w = x*y;
    std::cout <<"\nyour answer is: "<< w << endl;
    system("pause");
}
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

Ich habe nicht bemerkt, dass jemand anderes dies postete, also hier ist es.

Ähnliche Idee wie yeh Antwort, nur minimalistische Alternative.

Erstellen Sie eine Stapeldatei mit folgenden Inhalten:

helloworld.exe
pause

Verwenden Sie dann die Stapeldatei.

Sehen Sie, ob Ihre IDE über ein Kontrollkästchen in der Projekteinstellung verfügt, um das Fenster nach dem Programm zu öffnen. Wenn nicht, verwenden Sie std::cin.get(); ein Zeichen am Ende der Hauptfunktion lesen. Verwenden Sie jedoch unbedingt nur leitebasierte Eingaben (STD :: Getline) oder um mit übrig gebliebenen ungelesenen Zeichen zu befassen, sonst (std :: bis zur neuen Linie ignorieren), da sonst das .get () am Ende nur den Müll liest, den Sie verlassen haben ungelesen früher.

Dies scheint gut zu funktionieren:

cin.clear();
cin.ignore(2);

Wenn Sie den Puffer zuerst löschen, wird dies beim Lesen des nächsten kein Problem sein. Aus irgendeinem Grund cin.ignore(1) Funktioniert nicht, es muss 2 sein.

Sie können immer einfach eine Stapeldatei erstellen. Wenn Ihr Programm beispielsweise helloWorld.exe heißt, wäre ein Code:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1

Wenn Sie Windows ausführen, können Sie dies tun system("pause >nul"); oder system("pause");. Es führt einen Konsolenbefehl aus, um das Programm zu pausieren, bis Sie eine Taste drücken. >nul verhindert es zu sagen Press any key to continue....

Ich setze bei der letzten Rückkehr 0 des Programms einen Haltepunkt. Es funktioniert gut.

einfach

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}

ich benutzte cin.get() Und das ist funktioniert, aber eines Tages musste ich einen anderen benutzen cin.get([Array Variable]) Vorher, um sich eine Ling -Saite mit einem leeren Zeichen in der Mitte in zu schnappen. Also die cin.get() Vermeiden Sie das Eingabeaufforderungsfenster nicht ausschließen. Endlich fand ich einen anderen Weg: Drücken Sie Strg+F5 In einem externen Fenster zu öffnen und Visual Studio hat keine Kontrolle mehr darüber. Ich werde Sie nur nach dem Schließen nach dem Ausführen der endgültigen Befehle fragen.

Ich habe versucht, eine zu platzieren getchar() Funktion am Ende. Aber es hat nicht funktioniert. Also, was ich tat, war zwei hinzuzufügen getchar() Funktioniert nacheinander. Ich denke der erste getchar() absorbiert die Eintreten Tasten Sie nach den letzten Dateneingaben. Versuchen Sie also zwei hinzuzufügen getchar() Funktionen statt eines

Anstatt die Auslauf -Taste zu drücken, drücken Sie gleichzeitig Strg und F5. Sie erhalten die Taste, um die Nachricht fortzusetzen. Oder type "(Warnung Verwenden Sie dies nur zum Testen nicht tatsächlicher Programme als Antiviren mögen es nicht !!! 'Ich mag es nicht !!!!)

Verwenden Sie einfach cin.ignore () kurz vor der Rückkehr 0; zweimal

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

das ist alles

Sie müssen lediglich eine Variable für x festlegen und diese dann vor der Rückgabe 0 eingeben.

cout<<"\nPress any key and hit enter to end...";
cin>>x;

Sie können zu Beginn Ihrer sogar eine Ganzzahl deklarieren main() Funktion (sagen wir int a;) und legen std::cin >> a; Kurz vor dem Rückgabewert. Das Programm wird also weiter ausgeführt, bis Sie eine Taste drücken und eingeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top