Como parar o aplicativo de console C ++ de sair imediatamente?

Ultimamente, tenho tentado aprender C ++ neste site . Infelizmente, sempre que tento executar um dos exemplos de código, vejo esse programa aberto por cerca de meio segundo e, em seguida, fecho imediatamente. Existe uma maneira de impedir que o programa seja fechado imediatamente para que eu possa ver os frutos do meu esforço?

Edit: Como Charles Bailey corretamente aponta em um comentário abaixo, isso não funcionará se houver caracteres armazenados em buffer, e realmente não há uma boa maneira de contornar isso. Se você estiver executando um depurador conectado, a solução sugerida por John Dibling provavelmente é a solução mais limpa para o seu problema.

Dito isso, deixarei isso aqui e talvez outra pessoa ache útil. Eu usei muito como uma espécie de hack rápido ao escrever testes durante o desenvolvimento.


No final da sua function main , você pode chamar std::getchar();

Isto irá obter um único caractere de stdin , dando a você o tipo de comportamento “pressione qualquer tecla para continuar” (se você realmente quiser uma mensagem “pressione qualquer tecla”, você mesmo terá que imprimir uma).

Você precisa #include para getchar .

Se você estiver usando o Visual Studio e estiver iniciando o aplicativo de console fora do IDE:

pressionar CTRL-F5 (iniciar sem debugging) iniciará o aplicativo e manterá a janela do console aberta até que você pressione qualquer tecla.

A solução de James funciona para todas as plataformas.

Alternativamente, no Windows você também pode adicionar o seguinte antes de retornar da function main :

  system("pause"); 

Isso executará o comando de pause que aguarda até que você pressione uma tecla e também exiba uma mensagem agradável Press any key to continue . . . Press any key to continue . . .

Se você estiver usando o Visual C ++ 2010 Express da Microsoft e encontrar o problema com a tecla CTRL + F5 não funcionando para manter o console aberto após o término do programa, dê uma olhada neste tópico do MSDN .

Provavelmente, seu IDE está configurado para fechar o console após uma execução de CTRL + F5; na verdade, um “Projeto Vazio” no Visual C ++ 2010 fecha o console por padrão. Para mudar isso, faça como o Microsoft Moderator sugeriu:

Por favor, clique com o botão direito no nome do seu projeto e vá para a página Propriedades, por favor expanda Configuration Properties -> Linker -> System, selecione Console (/ SUBSYSTEM: CONSOLE) no menu suspenso SubSystem. Porque, por padrão, o projeto Empty não o especifica.

Eu costumo apenas colocar um ponto de interrupção na chave de fechamento do main() . Quando o fim do programa é alcançado por qualquer meio que o ponto de interrupção vai bater e você pode ALT-Tab para a janela do console para ver a saída.

Por que não apenas executar o programa a partir de um console, ou seja, executar o programa a partir do cmd.exe se estiver usando o Windows. Dessa forma, a janela fica aberta após o término do programa.

[EDIT]: Quando uso o KDevelop4, há uma instância completa de Bash (uma CLI do Linux) em execução em uma guia na parte inferior do IDE. Qual é o que eu uso neste tipo de circunstâncias.

Chame cin.get(); 2 vezes:

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

Antes do final do seu código, insira esta linha:

 system("pause"); 

Isso manterá o console até você apertar uma tecla.

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

Se você executar seu código a partir de um IDE competente, como Code :: Blocks , o IDE gerenciará o console usado para executar o código, mantendo-o aberto quando o aplicativo for fechado. Você não deseja adicionar código especial para manter o console aberto, pois isso o impedirá de funcionar corretamente quando você usá-lo para real, fora do IDE.

Ok, eu estou supondo que você está no Windows usando o Visual Studio … por quê? Bem, porque se você está em algum tipo de sistema operacional Linux, então você provavelmente estaria rodando a partir do console.

De qualquer forma, você pode adicionar porcaria ao final do seu programa, como os outros estão sugerindo, ou você pode simplesmente pressionar CTRL + F5 (iniciar sem debugging) e o Visual Studio deixará o console pronto depois de concluído.

Outra opção se você quer rodar a versão de Depuração e não adicionar porcaria ao seu código é abrir a janela do console (Iniciar -> Executar -> cmd) e navegar até o seu diretório de saída de Depuração . Em seguida, basta digitar o nome do seu executável e ele irá executar o seu programa de debugging no console. Você pode então usar o anexo do Visual Studio para processar ou algo assim, se você realmente quiser.

Se você estiver realmente depurando seu aplicativo no Visual C ++, pressione F5 ou o triângulo verde na barra de ferramentas. Se você não estiver realmente depurando (você não tem pontos de interrupção configurados), pressione Ctrl + F5 ou escolha Start Without Debugging nos menus (geralmente é no menu Debug, que eu concordo que é confuso.) Será um pouco mais rápido, e mais importante para você, fará uma pausa no final sem que você precise alterar seu código.

Como alternativa, abra um prompt de comando, navegue até a pasta onde está o seu exe e execute-o digitando seu nome. Dessa forma, quando terminar de executar o prompt de comando, não fechará e você poderá ver a saída. Eu prefiro ambos os methods para adicionar código que interrompe o aplicativo apenas como seu final.

Basta adicionar o seguinte no final do seu programa. Ele tentará capturar alguma forma de input do usuário, impedindo que o console feche automaticamente.

 cin.get(); 

Adicione as seguintes linhas antes de qualquer function exit() ou antes de qualquer return s em main() :

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

Para o Visual Studio (e apenas o Visual Studio), o seguinte trecho de código fornece um prompt ‘wait for keypress to continue’ que realmente aguarda o usuário pressionar uma nova chave explicitamente, primeiro liberando o buffer de input:

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

Observe que isso usa as macros tchar.h para serem compatíveis com vários ‘conjuntos de caracteres’ (como o VC ++ os chama).

Eu apenas faço isso:

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

Nota: limpar o buffer cin e isso é necessário apenas se você já usou o cin em algum momento antes no seu programa. Também usar std :: numeric_limits :: max () é provavelmente melhor que INT_MAX, mas é um pouco prolixo e geralmente desnecessário.

Use #include "stdafx.h" & system("pause"); assim como o código abaixo.

 #include "stdafx.h" #include  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"); } 

Idéia semelhante a yeh responder, apenas alternativa minimalista.

Crie um arquivo em lotes com o seguinte conteúdo:

 helloworld.exe pause 

Em seguida, use o arquivo em lotes.

 #include "stdafx.h" #include  #include  using namespace std; int main() { cout << "Press any key to continue..."; getch(); return 0; } 

Eu não notei mais ninguém postar isso então aqui está.

Veja se o seu IDE tem uma checkbox de seleção na configuração do projeto para manter a janela aberta após o término do programa. Caso contrário, use std::cin.get(); para ler um caractere no final da function principal. No entanto, certifique-se de usar apenas input baseada em linha (std :: getline) ou para lidar com caracteres não lidos restantes (std :: ignore até nova linha) porque senão o .get () no final só lerá o lixo deixado não lida mais cedo.

Isso parece funcionar bem:

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

Se você limpar o buffer primeiro, não será um problema quando você ler o próximo. Por alguma razão, cin.ignore(1) não funciona, tem que ser 2.

Tudo o que você tem que fazer é definir uma variável para x, basta digitar isso antes do retorno 0;

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

Você pode até mesmo declarar um inteiro no início de sua function main() (diga int a; ) e colocar std::cin >> a; pouco antes do valor de retorno. Assim, o programa continuará funcionando até que você pressione uma tecla e entre.

Você sempre pode criar um arquivo em lotes. Por exemplo, se o seu programa é chamado helloworld.exe, algum código seria:

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

Estou colocando um ponto de interrupção no último retorno 0 do programa. Funciona bem.

simplesmente

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

Eu usei cin.get() e isso é trabalhado, mas um dia eu precisei usar outro cin.get([Array Variable]) antes disso para pegar uma string de ling com caractere em branco no meio de. então o cin.get() não evitou que a janela do prompt de comando fechasse. Finalmente eu encontrei Outra maneira: Pressione CTRL + F5 para abrir em uma janela externa e o Visual Studio não tem mais controle sobre ele. Apenas lhe perguntará sobre o fechamento após a execução dos comandos finais.

Eu tentei colocar uma getchar() no final. Mas não funcionou. Então, o que eu fiz foi adicionar duas funções getchar() uma após a outra. Eu acho que o primeiro getchar() absorve a tecla Enter que você pressiona após a última input de dados. Então, tente adicionar duas funções getchar() vez de uma

Em vez de pressionar o botão de execução, pressione CTRL e F5 ao mesmo tempo, ele lhe dará a pressionar qualquer tecla para continuar a mensagem. Ou digite “(aviso usar isso apenas para testar programas não reais como um antivírus não gosta !!!!)” no final de sua function principal, mas: (aviso use isso apenas para testar programas não reais como um antivírus don gosta disso !!!!)

apenas use cin.ignore () antes de retornar 0; duas vezes

 main() { //your codes cin.ignore(); cin.ignore(); return 0; } 

Isso é tudo

Se você estiver executando o Windows, então você pode fazer o system("pause >nul"); ou system("pause"); . Ele executa um comando do console para pausar o programa até que você pressione uma tecla. >nul impede que ele diga Press any key to continue...