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 depois imediatamente fechado. Existe uma maneira de interromper o programa imediatamente para que eu possa ver os frutos do meu esforço?
193
Respostas:
Edit: Como Charles Bailey aponta corretamente em um comentário abaixo, isso não funcionará se houver caracteres armazenados em buffer
stdin
, e não há realmente nenhuma boa maneira de contornar isso. Se você estiver executando com um depurador conectado, a solução sugerida por John Dibling é provavelmente a solução mais limpa para o seu problema.Dito isto, vou deixar isso aqui e talvez alguém ache útil. Eu o usei bastante como uma espécie de hack rápido ao escrever testes durante o desenvolvimento.
No final de sua
main
função, você pode chamarstd::getchar();
Isso obterá um caractere único
stdin
, fornecendo a você o tipo de comportamento "pressione qualquer tecla para continuar" (se você realmente quiser uma mensagem "pressione qualquer tecla", precisará imprimir um).Você precisa
#include <cstdio>
paragetchar
.fonte
getchar
não resolve o problema - ou apenas em circunstâncias limitadas, pelo menos. Ele lê um caractere destdin
, mas se já houver caracteres armazenados em buffer no stdin, o programa continuará sem esperar, independentemente de você imprimir ou não um prompt.\n
é uma solução parcial, mas não ajudará se mais de uma linha de entrada for armazenada em buffer. Eu não sei de uma maneira C ++ padrão para limpar tudo de um fluxo de entrada. : - /std::cin.ignore(std::cin.rdbuf()->in_avail());
? Entendi daqui .std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
com#include <limits>
.Se você estiver usando o Visual Studio e iniciando o aplicativo de console pelo IDE:
pressionar CTRL-F5 (iniciar sem depuração) iniciará o aplicativo e manterá a janela do console aberta até você pressionar qualquer tecla.
fonte
A solução de James funciona para todas as plataformas.
Como alternativa,
Windows
você também pode adicionar o seguinte antes de retornar damain
função:Isso executará o
pause
comando que espera até você pressionar uma tecla e também exibe uma boa mensagemPress any key to continue . . .
fonte
Se você estiver usando o Visual C ++ 2010 Express da Microsoft e se deparar com um problema com CTRL + F5 que não está funcionando para manter o console aberto após a conclusão do programa, consulte este thread do MSDN .
Provavelmente, o 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 Microsoft Moderator sugeriu:
fonte
Eu geralmente coloco um ponto de interrupção na
main()
cinta encaracolada de fechamento. Quando o final do programa for alcançado por qualquer meio, o ponto de interrupção será atingido e você poderá pressionar a tecla ALT-Tab na janela do console para visualizar a saída.fonte
Por que não apenas executar o programa em um console, ou seja, execute o programa no 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 KDevelop4, há uma instância completa do Bash (uma CLI do Linux) em execução em uma guia na parte inferior do IDE. Qual é o que eu uso nesse tipo de circunstância.
fonte
main
definido, mas se eu não o definir explicitamente na linha de comando, o VS mata a janela quando o aplicativo sai. sigh #main
no projeto, o vinculador, por padrão, usará o subsistema CONSOLE. Ao depurar ou executar, você verá uma janela do console. No entanto, a menos que você especifique explicitamente CONSOLE como o subsistema nas propriedades do projeto, o Visual Studio não manterá a janela do console aberta. Sempre começo de um projeto vazio e raramente altero as propriedades individuais do projeto, por isso nunca vi a janela do console permanecer. Desculpe pela confusãoAntes do final do seu código, insira esta linha:
Isso manterá o console até você pressionar uma tecla.
fonte
Ligue
cin.get();
2 vezes:fonte
Se você executar seu código em 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 impedirá que funcione corretamente quando você o usar de verdade, fora do IDE.
fonte
Ok, acho que você está no Windows usando o Visual Studio ... por quê? Bem, porque se você estiver em algum tipo de sistema operacional Linux, provavelmente o executará no console.
De qualquer forma, você pode adicionar porcaria ao final do seu programa, como outros sugerem, ou apenas pressionar CTRL + F5 (iniciar sem depuração) e o Visual Studio deixará o console pronto assim que concluído.
Outra opção, se você deseja executar a versão Debug e não adicionar porcaria ao seu código, é abrir a janela do console (Iniciar -> Executar -> cmd) e navegar para o diretório de saída Debug . Em seguida, basta digitar o nome do seu executável e ele executará seu programa de depuração no console. Você pode usar o anexo do Visual Studio para processar ou algo assim, se realmente quiser.
fonte
Eu não percebi mais ninguém postar isso, então aqui está.
fonte
conio.h
é um cabeçalho específico do Windows e pode não estar disponível em todas as máquinas (ou talvez você precise vinculá-lo separadamente, o que é um exagero).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 está realmente depurando (você não tem pontos de interrupção definidos), pressione Ctrl + F5 ou escolha Iniciar sem depuração nos menus (geralmente é 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á 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 os dois métodos ao adicionar código que interrompe o aplicativo assim que terminar.
fonte
Basta adicionar o seguinte no final do seu programa. Ele tentará capturar alguma forma de entrada do usuário, impedindo o fechamento automático do console.
fonte
Adicione as seguintes linhas antes de qualquer
exit()
função ou antes de qualquerreturn
s emmain()
:fonte
Para o Visual Studio (e apenas o Visual Studio), o seguinte trecho de código fornece um prompt 'aguarde a continuação do pressionamento de tecla' que realmente espera que o usuário pressione uma nova tecla explicitamente, liberando primeiro o buffer de entrada:
Observe que isso usa as
tchar.h
macro para ser compatível com vários 'conjuntos de caracteres' (como o VC ++ os chama).fonte
Eu apenas faço isso:
Nota: limpar o buffer cin e isso só é necessário se você tiver usado o cin em algum momento no início do seu programa. Também usar std :: numeric_limits :: max () provavelmente é melhor que INT_MAX, mas é um pouco prolixo e geralmente desnecessário.
fonte
Use
#include "stdafx.h"
&system("pause");
como no código abaixo.fonte
system
é declarado em<cstdlib>
, nãostdafx.h
.Idéia semelhante a yeh resposta, apenas alternativa minimalista.
Crie um arquivo em lotes com o seguinte conteúdo:
Em seguida, use o arquivo em lotes.
fonte
simplesmente
por alguma razão, geralmente há 1 caractere possível de ler com o getchar já no stdin, quando você executa um programa. portanto, o primeiro getchar lê esse caractere e o segundo getchar aguarda a entrada do usuário (sua) antes de sair do programa. E depois que um programa sai da maioria dos terminais, especialmente no Windows, feche o terminal imediatamente. portanto, o que pretendemos é uma maneira simples de impedir que um programa seja concluído depois que ele gera tudo. É claro que existem maneiras mais complexas e limpas de resolver isso, mas essa é a mais simples.
fonte
Veja se o seu IDE possui uma caixa 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 função principal. No entanto, certifique-se de usar apenas a entrada baseada em linha (std :: getline) ou de lidar com os caracteres não lidos restantes (std :: ignore até newline) porque, caso contrário, o .get () no final lerá apenas o lixo que você deixou não lidas anteriormente.fonte
Isso parece funcionar bem:
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.fonte
cin.rdbuf()->in_avail
,. Não algum número mágico como 1 ou 2.Você sempre pode apenas criar um arquivo em lotes. Por exemplo, se seu programa for chamado helloworld.exe, algum código seria:
fonte
Se você estiver executando o Windows, poderá fazer
system("pause >nul");
ousystem("pause");
. Ele executa um comando do console para pausar o programa até você pressionar uma tecla.>nul
impede de dizerPress any key to continue...
.fonte
Estou colocando um ponto de interrupção no último retorno 0 do programa. Funciona bem.
fonte
Eu usei
cin.get()
e isso funcionou, mas um dia eu precisava usar outrocin.get([Array Variable])
antes disso para pegar uma corda de ling com caracteres em branco no meio de. portantocin.get()
, não evitou o fechamento da janela do prompt de comando. Finalmente, encontrei Outra maneira: Pressione CTRL + F5 para abrir em uma janela externa e o Visual Studio não tem mais controle sobre ela. Apenas perguntará sobre o fechamento após a execução dos comandos finais.fonte
Eu tentei colocar uma
getchar()
função no final. Mas não deu certo. Então, o que eu fiz foi adicionar duasgetchar()
funções uma após a outra. Eu acho que o primeirogetchar()
absorve a Entertecla que você pressiona após a última entrada de dados. Portanto, tente adicionar duasgetchar()
funções em vez de umafonte
Em vez de pressionar o botão de execução, pressione CTRL e F5 ao mesmo tempo, pressionando qualquer tecla para continuar a mensagem. Ou digite "(aviso, use isso apenas para testar programas não reais, pois os antivírus não gostam disso !!!!)" no final da sua função principal, mas: (aviso, use isso apenas para testar programas não reais, pois os antivírus não não gosto !!!!)
fonte
basta usar cin.ignore () logo antes do retorno 0; duas vezes
Isso é tudo
fonte
Tudo o que você precisa fazer é definir uma variável para x, basta digitar isso antes do retorno 0;
fonte
Você pode até declarar um número inteiro no início de sua
main()
função (digamosint a;
) e colocar umstd::cin >> a;
pouco antes do valor de retorno. Portanto, o programa continuará em execução até você pressionar uma tecla e entrar.fonte