Domanda

Ultimamente, ho cercato di imparare il C++ questo sito web.Sfortunatamente ogni volta che provo a eseguire uno degli esempi di codice, vedo che il programma si apre per circa mezzo secondo e poi si chiude immediatamente.Esiste un modo per impedire la chiusura immediata del programma in modo da poter vedere i frutti dei miei sforzi?

È stato utile?

Soluzione

Modifica Come Charles Bailey ha giustamente sottolineato in un commento qui sotto, questo non funzionerà se ci sono caratteri nel buffer in stdin, e non c'è davvero nessun buon modo per aggirare questo. Se si sta eseguendo con un debugger, di John Dibling soluzione suggerita è probabilmente la soluzione più pulita al vostro problema.

Detto questo, lascio questo qui e forse qualcun altro lo troveranno utile. L'ho usato molto come trucco veloce di sorta durante la scrittura di test durante lo sviluppo.


Al termine della funzione main, è possibile chiamare std::getchar();

In questo modo ottenere un singolo carattere da stdin, dando così il tipo "premere un tasto qualsiasi per continuare" di comportamento (se si desidera veramente un messaggio di "premere un tasto qualsiasi", dovrete stampare uno voi stessi).

È necessario #include <cstdio> per getchar.

Altri suggerimenti

Se si utilizza Visual Studio e si avvia l'applicazione di console fuori dalla IDE:

premendo CTRL-F5 (Avvia senza eseguire debug) inizierà l'applicazione e tenere la finestra della console aperta fino a quando si preme un tasto.

La soluzione da James lavora per tutte le piattaforme.

In alternativa su Windows si può anche aggiungere la seguente poco prima si torna dalla funzione main:

  system("pause");

In questo modo eseguire il comando pause che aspetta fino a quando si preme un tasto e visualizza anche un bel messaggio Press any key to continue . . .

Se si utilizza Visual C Microsoft ++ 2010 Express e esegue nella questione con CTRL + F5 non funziona per mantenere la console aperta dopo che il programma è terminato, dare un'occhiata a questa discussione MSDN .

Probabilmente il vostro IDE è impostato per chiudere la console dopo un CTRL + F5 corsa; di fatto, un "progetto vuoto" in Visual C ++ 2010 chiude la console di default. Per cambiare questo, fare come ha suggerito il Microsoft Moderatore:

  

Si prega di fare clic destro sul nome del progetto e passare alla pagina delle proprietà, si prega di espandere Configurazione Proprietà -> Linker -> Sistema, seleziona Console (/ SUBSYSTEM: CONSOLE) in SubSystem discesa. Poiché, per impostazione predefinita, il progetto Vuoto non specifica di esso.

Io di solito appena messo un punto di interruzione parentesi graffa di chiusura del main(). Quando la fine del programma viene raggiunto con qualsiasi mezzo il punto di interruzione sarà colpito ed è possibile Alt-Tab nella finestra della console per visualizzare l'output.

Perché non basta eseguire il programma da una console ad esempio eseguire il programma da cmd.exe se si utilizza Windows. In questo modo la finestra rimane aperta dopo che il programma termina.

[EDIT]: Quando uso KDevelop4 c'è un esempio a tutti gli effetti di Bash (un CLI Linux) in esecuzione in uno scheda nella parte inferiore della IDE. Che è quello che uso in questo genere di circostanze.

Prima della fine del codice, inserire questa riga:

system("pause");

Ciò manterrà la console fino a colpire una chiave.

#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
}

Chiamata cin.get(); 2 volte:

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

Se si esegue il codice da un IDE competente, come ad esempio Code :: Blocks , l'IDE gestire la console che utilizza per eseguire il codice, mantenendo aperta quando l'applicazione chiude. Se non si desidera aggiungere il codice speciale per mantenere la console aperta, perché questo gli impedirà di funzionare correttamente quando lo si utilizza per davvero, al di fuori del IDE.

Ok Sto indovinando siete su Windows utilizzando Visual Studio ... perché? Beh, perché se si è su una sorta di sistema operativo Linux, allora si sarebbe probabilmente essere in esecuzione dalla console.

In ogni modo, è possibile aggiungere merda alla fine del programma come gli altri suggeriscono, oppure si può semplicemente premere CTRL + F5 (Avvia senza eseguire debug) e Visual Studio lascerà la console una volta completata .

Un'altra opzione se si desidera eseguire la versione di debug e non aggiungi merda al codice è quello di aprire la finestra della console (Start -> Esegui -> cmd) e navigare verso la Debug . Poi, basta inserire il nome del file eseguibile e verrà eseguito il programma di debug nella console. È quindi possibile utilizzare Visual Studio Connetti a processo o qualcosa se si vuole veramente.

Se si sta in realtà il debug dell'applicazione in Visual C ++, premere F5 o il triangolo verde sulla barra degli strumenti. Se non si è in realtà il debug di esso (non hai punti di interruzione set), premere Ctrl + F5 o scegliere Avvia senza eseguire debug sui menu (di solito dal menu Debug, che sono d'accordo è confusa.) Sarà un po 'più veloce, e ancora più importante per voi, sarà una pausa alla fine senza dover modificare il codice.

In alternativa, aprire un prompt dei comandi, accedere alla cartella in cui il vostro exe è, ed eseguirlo digitando il suo nome. In questo modo quando è finito in esecuzione il prompt dei comandi non si chiude e si può vedere l'output. Io preferisco entrambi questi metodi per l'aggiunta di codice che interrompe l'applicazione proprio come il suo finale.

Basta aggiungere il seguente alla fine del programma. Si cercherà di catturare una qualche forma di input dell'utente in tal modo si ferma la console dalla chiusura automatica.

cin.get();

Aggiungere le seguenti righe prima di qualsiasi funzione exit() o prima di qualsiasi returns in main():

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

Per Visual Studio (e solo Visual Studio) il seguente frammento di codice ti dà una 'attendere pressione del tasto per continuare' pronta che attende veramente per all'utente di premere un tasto nuovo in modo esplicito, in primo luogo vampate di calore il buffer di ingresso:

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

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

Si noti che questo utilizza della macro tchar.h per essere compatibile con più 'set di caratteri' (come VC ++ li chiama).

Io faccio solo questo:

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

Nota: cancellare la memoria di cin e tale è necessaria solo se hai utilizzato cin ad un certo punto in precedenza nel programma. Anche utilizzando std :: :: numeric_limits max () è probabilmente meglio allora INT_MAX, ma è un po 'prolisso e di solito non necessario.

Usa #include "stdafx.h" & system("pause"); proprio come il codice in basso.

#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;
}

Non ho notato nessun altro posto questo ecco che è.

un'idea simile a yeh risposta, solo minimalista alternativa.

Creare un file batch con il seguente contenuto:

helloworld.exe
pause

Quindi utilizzare il file batch.

Verifica se il tuo IDE ha una casella di controllo nelle impostazioni del progetto per mantenere la finestra aperta dopo la chiusura del programma.In caso contrario, utilizzare std::cin.get(); per leggere un carattere alla fine della funzione principale.Tuttavia, assicurati di utilizzare solo input basato su riga (std::getline) o di gestire altrimenti i caratteri non letti rimanenti (std::ignore fino a nuova riga) perché altrimenti .get() alla fine leggerà solo la spazzatura che hai lasciato non letto prima.

Questo sembra funzionare bene:

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

Se si cancella il buffer prima che non sarà un problema quando si legge il prossimo. Per qualche ragione cin.ignore(1) non funziona, deve essere 2.

Si può sempre basta creare un file batch. Ad esempio, se il programma si chiama Helloworld.exe, un po 'di codice sarebbe:

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

Se si esegue Windows, allora si può fare system("pause >nul"); o system("pause");. Si esegue un comando console per mettere in pausa il programma fino a quando si preme un tasto. >nul impedisce di dire Press any key to continue....

sto mettendo un punto di interruzione in occasione dell'ultima ritorno 0 del programma. Funziona bene.

semplicemente

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

Ho usato cin.get() e che è lavorato ma un giorno ho bisogno di usare un altro cin.get([Array Variable]) prima di afferrare una stringa ling con carattere vuoto in mezzo. in modo che il cin.get() non evitare finestra del prompt dei comandi dalla chiusura. Alla fine ho trovato un altro modo: Premi CTRL + F5 per aprire in una finestra esterna e Visual Studio non avere il controllo su più. Basta ti chiederà di chiudere dopo i comandi finali eseguiti.

Ho provato a mettere in funzione getchar() alla fine. Ma non ha funzionato. Quindi quello che ho fatto è stato aggiungere due funzioni getchar() uno dopo l'altro. Penso che la prima getchar() assorbe il Invio tasto premuto dopo l'ultima immissione dei dati. Quindi provare ad aggiungere due funzioni getchar() invece di uno

Invece di premere il pulsante di esecuzione, premere CTRL e F5, allo stesso tempo, che vi darà la premere un tasto qualsiasi per continuare il messaggio. O del tipo "(avvertimento uso questo solo per testare programmi non attuali come un antivirus non mi piace !!!!)" alla fine della funzione principale, ma: (avvertimento uso questo solo per testare programmi non attuali come un antivirus don 't like it !!!!)

basta usare cin.ignore () a destra prima di return 0; due volte

main()
  {
  //your codes 

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

  return 0;
  }

questo è tutto

Tutto quello che dovete fare impostare una variabile per x poi basta digitare questo nella prima del ritorno 0;

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

Si può anche dichiarare un intero all'inizio della funzione main() (diciamo int a;) e mettere std::cin >> a; poco prima del valore di ritorno. Così il programma continuerà a girare fino a quando si preme un tasto e si inserisce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top