Estou começando no Visual C ++ e gostaria de saber como manter a janela do console.
Por exemplo, este seria um aplicativo típico "olá mundo":
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Qual é a linha que estou perdendo?
visual-c++
console
Raúl Roa
fonte
fonte
Respostas:
Inicie o projeto em Ctrl+F5vez de apenasF5 .
A janela do console agora ficará aberta com o
Press any key to continue . . .
mensagem após a saída do programa.Observe que isso requer a
Console (/SUBSYSTEM:CONSOLE)
opção vinculador, que você pode ativar da seguinte maneira:CTRL-F5 e as dicas do subsistema trabalham juntas; eles não são opções separadas.
(Cortesia de DJMorreTX de http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
fonte
cin.get(),getchar(), system("pause")
nem com nenhum outro lixo. Mudar isso funciona.system("pause");
no final do seu código. Faz sentido e funciona bem.A maneira padrão é
cin.get()
antes da sua declaração de retorno.fonte
_tmain
. Eu votaria outro -1 nocin.get()
lugar de colocar um ponto de interrupção no F5 ou usar Ctrl F5. Mas eu tenho apenas um voto negativo._tmain
? Essa é a maneira padrão de escrever um aplicativo Windows direcionado ao subsistema Console. Desviar-se desse padrão é o que seria uma má prática. Claramente, ninguém está falando sobre código portátil aqui; a pergunta diz Visual C ++ e_tmain
é a assinatura que aparece no código de exemplo. É hora de desistir dessa religião. O Windows é "não padrão" por padrão, e há boas razões para seguir seus padrões._tmain
é porque é totalmente não-padrão desnecessário (o padrão internacional C ++ exige umamain
planilha) e porque usa oT
esquema macro da Microsoft , que é uma complicação desnecessária e palavreado para dar suporte ao Windows 9x. Se você se sentir diferente do padrão é uma má prática, não use absolutamentetmain
. Não há boas razões para usartmain
, exceto trolling ou, para profissionais, demonstrar total incompetência.Coloque um ponto de interrupção na
return
linha.Você está executando no depurador, certo?
fonte
Outra opção é usar
Embora isso não seja muito portátil, pois funcionará apenas no Windows, mas imprimirá automaticamente
fonte
system
é declarado em<stdlib.h>
.Para projetos de makefile, a solução aceita falha, devido a um erro no Visual Studio (que está presente pelo menos até a versão 2012 - ainda não testei 2013). Este bug é detalhado aqui .
Para que o console seja pausado após o término do programa em um projeto de makefile, execute estas etapas (isso pode ser diferente para versões diferentes de 2010 - 2012):
1) Passe- EDIT : veja abaixo./SUBSYSTEM:CONSOLE
para o vinculador.2) Abra seu arquivo de projeto (.vcxproj) em um editor de texto.
3) Dentro da
<project>
marca raiz , insira o seguinte:4) Recarregue o projeto na sua solução.
5) Execute o programa sem depuração (CTRL + F5).
EDITAR:
Conforme meu comentário abaixo, definir a opção de vinculador
/SUBSYSTEM:CONSOLE
é realmente irrelevante para projetos de makefile (e nem sempre é possível, se você estiver usando um compilador que não seja o MSVC). O que importa é que a configuração seja adicionada ao arquivo .vcxproj, conforme a etapa 3 acima.fonte
/SUBSYSTEM:CONSOLE
para o vinculador é realmente irrelevante - a etapa 3 é tudo o que importa. Lembre-se de que minha resposta está relacionada a projetos makefile - em um projeto makefile, o IDE não tem como saber o que você está passando para o vinculador (talvez você nem esteja usando um compilador que tem uma/SUBSYSTEM:CONSOLE
opção), e é o projeto próprio que controla se deve ou não ser um programa de console. Vou editar minha resposta de acordo.Você pode usar
cin.get();
oucin.ignore();
imediatamente antes da sua declaração de retorno para evitar que a janela do console se feche.fonte
basta colocar um ponto de interrupção no último colchete do main.
funciona para mim, não há necessidade de executar sem depuração. Ele também executa destruidores antes de atingir o ponto de interrupção, para que você possa verificar se há alguma mensagem impressa nesses destruidores.
fonte
Basta adicionar um ponto de interrupção ao colchete de fechamento do seu
_tmain
método. Essa é a maneira mais fácil, e você não precisa adicionar código para depurar.fonte
Coloque um ponto de interrupção na chave final de
main()
. Ele disparará mesmo com váriasreturn
instruções. A única desvantagem é que uma ligação paraexit()
não será atendida.Se você não estiver depurando, siga os conselhos da resposta de Zoidberg e inicie seu programa com Ctrl+ em F5vez de apenas F5.
fonte
Meus 2 centavos:
Opção 1: adicione um ponto de interrupção no final de
main()
Opção 2: adicione esse código, logo antes do
return 0;
:Você precisa incluir
<iomanip>
parastd::numeric_limits
fonte
basta adicionar system ("pause") no final do código antes de retornar 0 como este
fonte
fonte
cin.get()
, Ousystem("PAUSE")
. Eu não ouvi você pode usarreturn(0);
fonte
Incluo
#include <conio.h>
e depois adicionogetch();
logo antes dareturn 0;
linha. Foi o que aprendi na escola de qualquer maneira. Os métodos mencionados acima aqui são bem diferentes, eu vejo.fonte
Teve o mesmo problema. Estou usando
_getch()
pouco antes da declaração de retorno. Funciona.fonte
(Algumas opções podem ser chamadas por nomes diferentes. Eu não uso a versão em inglês)
Eu tive o mesmo problema, quando criei projetos com a opção "projeto vazio", crie projeto como "aplicativo de console Win32" em vez de "projeto vazio". Na caixa de diálogo que aparece agora, você pressiona "continuar" e depois pode marcar a opção "projeto vazio" e pressionar confirmar. Depois disso, CTRL + F5 abrirá um console que não fecha automaticamente.
fonte
Eu tive o mesmo problema; No meu aplicativo, há vários pontos exit () e não havia como saber exatamente onde ele sai; então, descobri isso:
ou
Dessa forma, ele irá parar, não importa onde saímos no programa.
fonte
atexit
.atexit
pega um ponteiro de função, não um número inteiro.Outra opção:
Principalmente:
fonte
Na verdade, a solução real é a seleção do próprio modelo de projeto. É necessário selecionar o aplicativo de console do Win32 no VS antigo ou preencher primeiro o nome do projeto, clicar duas vezes no assistente da área de trabalho do Windows e selecionar o aplicativo de console do Win32. Em seguida, selecione o projeto vazio neste momento. Isso permite o que o questionador original realmente queria sem adicionar um ponto de parada extra e manter o código. Eu também passei por esse problema. A resposta também está no site do MSDN.
fonte
Aqui está uma maneira de manter a janela de comando aberta, independentemente de como a execução é interrompida sem modificar nenhum código:
No Visual Studio, abra Páginas de propriedades do projeto -> Depuração .
Para Comando , insira
$(ComSpec)
Para argumentos de comando , insira
/k $(TargetPath)
. Anexe todos os argumentos ao seu próprio aplicativo.Agora, F5 ou Ctrl-F5 executa o Windows / System32 / cmd.exe em uma nova janela e / k garante que o prompt de comando permaneça aberto após a conclusão da execução.
A desvantagem é que a execução não para em pontos de interrupção.
fonte
Como alguns já apontaram, a solução Zoidbergs não anexa o depurador, que é algo que você geralmente não deseja.
A melhor opção imo é configurar seu VS de acordo (a partir do VS 2017), acessando Ferramentas> Opções> Depuração> Geral. Lá, desmarque "Feche automaticamente o console quando a depuração parar" (na parte inferior), o que provavelmente está marcado no seu caso.
fonte
você pode simplesmente colocar keep_window_open (); antes do retorno aqui é um exemplo
fonte