Como impedir que o aplicativo de console C ++ sai imediatamente?
Pergunta
Ultimamente, tenho tentado aprender C ++ de esse site. Infelizmente, sempre que tento executar uma das amostras de código, vejo esse programa aberto por cerca de meio segundo e depois feche imediatamente. Existe uma maneira de impedir que o programa feche imediatamente para que eu possa ver os frutos do meu esforço?
Solução
Editar: Como Charles Bailey aponta com razão em um comentário abaixo, isso não funcionará se houver personagens bobal em stdin
, e realmente não há uma boa maneira de contornar isso. Se você está correndo com um depurador anexado, Solução sugerida de John Dibling é provavelmente a solução mais limpa para o seu problema.
Dito isto, vou deixar isso aqui e talvez alguém ache isso útil. Eu o usei muito como uma espécie rápida ao escrever testes durante o desenvolvimento.
No final do seu main
função, você pode ligar std::getchar();
Isso receberá um único personagem de stdin
, Dando assim o tipo de comportamento "Pressione qualquer tecla para continuar" (se você realmente deseja uma mensagem "Pressione qualquer tecla", você terá que imprimir um).
Você precisa #include <cstdio>
por getchar
.
Outras dicas
Se você estiver usando o Visual Studio e está iniciando o aplicativo de console fora do IDE:
pressionando Ctrl-F5 (Iniciar sem depuração) Iniciará o aplicativo e manterá a janela do console aberta até que você pressione qualquer tecla.
A solução de James trabalha para todas as plataformas.
Alternativamente Windows
Você também pode adicionar o seguinte antes de voltar de main
função:
system("pause");
Isso vai executar o pause
comando que espera até você pressionar uma tecla e também exibe uma boa mensagem Press any key to continue . . .
Se você estiver usando o Visual C ++ 2010 Express da Microsoft e encontre o problema com Ctrl+F5 não trabalhando para manter o console aberto após o término do programa, dê uma olhada em Este thread msdn.
Provavelmente seu IDE está definido para fechar o console após uma execução Ctrl+F5; De fato, um "projeto vazio" no Visual C ++ 2010 fecha o console por padrão. Para mudar isso, faça o que o moderador da Microsoft sugeriu:
Clique com o botão direito do mouse no nome do projeto e vá para a página Propriedades, expanda Propriedades de configuração -> Linker -> Sistema, selecione Console (/Subsistema: Console) no Subsistema Dropado. Porque, por padrão, o projeto vazio não o especifica.
Eu geralmente apenas coloco um ponto de interrupção em main()
está fechando a cinta encaracolada. Quando o final do programa for alcançado por qualquer meio que o ponto de interrupção será atingido e você poderá alt-tab até a janela do console para visualizar a saída.
Por que não executar o programa de um console, ou seja, execute o programa do cmd.exe se você estiver usando o Windows. Dessa forma, a janela permanece aberta após o término do programa.
EDIT]: Quando eu uso o Kdevelo4, há uma instância totalmente de plena parte do Bash (uma CLI Linux) em uma guia na parte inferior do IDE. Que é o que eu uso nesse tipo de circunstâncias.
Antes do final do seu código, insira esta linha:
system("pause");
Isso manterá o console até você atingir uma chave.
#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
}
Ligar cin.get();
2 vezes:
//...
cin.get();
cin.get();
return 0
}
Se você executar seu código de um IDE competente, como Código :: Blocks, o IDE gerenciará o console usado para executar o código, mantendo -o aberto quando o aplicativo fechar. Você não deseja adicionar código especial para manter o console aberto, porque isso impedirá que ele funcione corretamente quando você o usa de verdade, fora do IDE.
Ok, estou supondo que você esteja no Windows usando o Visual Studio ... por quê? Bem, porque se você estiver em algum tipo de sistema operacional Linux, provavelmente estaria executando -o no console.
De qualquer forma, você pode adicionar uma porcaria ao final do seu programa, como os outros estão sugerindo, ou você pode apenas acertar Ctrl + F5 (Comece sem depuração) e o Visual Studio deixará o console uma vez concluído.
Outra opção se você deseja executar 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 para o seu Diretório de saída de depuração. Em seguida, basta inserir o nome do seu executável e ele executará seu programa de depuração no console. Você pode usar o anexo do Visual Studio ao processo ou algo assim, se realmente quiser.
Se você está realmente depurando seu aplicativo no Visual C ++, pressione F5 ou o triângulo verde na barra de ferramentas. Se você realmente não está depurgando (você não tem pontos de interrupção), pressione Ctrl+F5 ou escolha Iniciar sem depurar os menus (geralmente está no menu Debug, o que eu concordo é 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á seu exe e execute -o digitando seu nome. Dessa forma, quando terminar de executar o prompt de comando não fechar e você pode ver a saída. Eu prefiro esses dois métodos para adicionar código que interrompe o aplicativo exatamente como seu fim.
Basta adicionar o seguinte no final do seu programa. Ele tentará capturar alguma forma de entrada do usuário, portanto, o console fecha automaticamente.
cin.get();
Adicione as seguintes linhas antes de qualquer exit()
função ou antes de qualquer return
pecado 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 snippet de código oferece uma 'espera para que o keypress continue', que realmente aguarda o usuário para pressionar um novo Chave explicitamente, primeiro lavando o buffer de entrada:
#include <cstdio>
#include <tchar.h>
#include <conio.h>
_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();
Observe que isso usa o tchar.h
As macro são compatíveis com vários 'conjuntos de caracteres' (como o VC ++ os chama).
Eu só 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 de CIN e isso só é necessário se você usou o CIN em algum momento anteriormente no seu programa. Também usando std :: numeric_limits :: max () provavelmente é melhor do que int_max, mas é um pouco prolixo e geralmente desnecessário.
Usar #include "stdafx.h"
& system("pause");
Assim como o código abaixo.
#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;
}
Eu não notei mais ninguém postar isso, então aqui está.
Ideia semelhante a sim Resposta, apenas alternativa minimalista.
Crie um arquivo em lote com o seguinte conteúdo:
helloworld.exe
pause
Em seguida, use o arquivo em lote.
Veja se o seu IDE tem uma caixa de seleção na configuração do projeto para manter a janela aberta após o término do programa. Se não, use std::cin.get();
para ler um personagem no final da função principal. No entanto, certifique-se de usar apenas a entrada baseada em linha (std :: getLine) ou para lidar com os restos de caracteres não lidos (std :: ignore até newline) porque, caso contrário, o .get () no final só lerá o lixo que você deixou não lido 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 algum motivo cin.ignore(1)
Não funciona, tem que ser 2.
Você sempre pode apenas criar um arquivo em lote. Por exemplo, se o seu programa for chamado helloworld.exe, algum código seria:
@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1
Se você está executando o Windows, então você pode fazer system("pause >nul");
ou system("pause");
. Ele executa um comando de console para pausar o programa até que você pressione uma tecla. >nul
impede que ele diga Press any key to continue...
.
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 precisava usar outro cin.get([Array Variable])
Antes disso, para pegar uma corda de ling com um personagem em branco no meio de. então o cin.get()
Não evitou o fechamento da janela Prompt de comando. Finalmente encontrei outra maneira: pressione Ctrl+F5 Abrir em uma janela externa e o Visual Studio não tem mais controle sobre ele. Apenas perguntará sobre o fechamento após a execução dos comandos finais.
Eu tentei colocar um getchar()
função no final. Mas não funcionou. Então, o que eu fiz foi adicionar dois getchar()
funciona um após o outro. Eu acho o primeiro getchar()
absorve o Digitar Tecla que você pressiona após a última entrada de dados. Então tente adicionar dois getchar()
funções em vez de um
Em vez de pressionar o botão Executar, pressione Ctrl e F5 ao mesmo tempo, ele fornecerá a tecla Pressione qualquer tecla para continuar a mensagem. Ou digite "(AVISO Use isso apenas para testar programas não reais como um antivírus não gosta !!!!)" No final da sua função principal, mas: (AVISO Use isso apenas para testar programas não reais como um antivírus Don don 'T gosto !!!!)
Basta usar o cin.ignore () logo antes do retorno 0; duas vezes
main()
{
//your codes
cin.ignore();
cin.ignore();
return 0;
}
isso é tudo
Tudo o que você precisa 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é declarar um número inteiro no início de seu main()
função (digamos int a;
) e colocar std::cin >> a;
pouco antes do valor de retorno. Portanto, o programa continuará sendo executado até você pressionar uma tecla e entrar.