ti-enxame.com

Evitando que a janela do console feche no aplicativo Visual Studio C/C++ Console

Esta é provavelmente uma questão embaraçosa, pois sem dúvida a resposta é incrivelmente óbvia.

Eu usei o Visual Studio por anos, mas esta é a primeira vez que eu fiz qualquer desenvolvimento de 'aplicativo de console'.

Quando executo meu aplicativo, a janela do console é exibida, a saída do programa aparece e, em seguida, a janela é fechada enquanto o aplicativo é encerrado.

Existe uma maneira de mantê-lo aberto até que eu verifiquei a saída ou visualize os resultados após a janela ter sido fechada?

409
Martin

Se você executar sem depuração (Ctrl + F5), em seguida, por padrão, solicitará que você pressione Enter para fechar a janela. Se você quiser usar o depurador, você deve colocar um ponto de interrupção na última linha.

421
Tom

Clique com o botão direito no seu projeto 

Propriedades> Propriedades de Configuração> Linker> System

Selecione Console (/ SUBSYSTEM: CONSOLE) na opção SubSystem ou você pode simplesmente digitar Console no campo de texto!

Agora tente ... deve funcionar

187
Viraj

Aqui está uma maneira para o C/C++:

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

Coloque isso na parte superior do programa e, se estiver em um sistema Windows (#ifdef _WIN32), ele criará uma macro chamada WINPAUSE. Sempre que você quiser que seu programa pause, chame WINPAUSE; e ele fará uma pausa no programa, usando o comando DOS. Para outros sistemas como o Unix/Linux, o console não deve sair na saída do programa.

43
Shaun

Vá para o menu de depuração -> pressione StartWithoutDebugging

25
pashaplus

Se você estiver usando o .NET, coloque Console.ReadLine() antes do final do programa. 

Ele irá aguardar <ENTER>.

20
Cheeso

tente chamar getchar() logo antes de main() retornar.

11
Magarusu

(/ SUBSYSTEM: CONSOLE) não funcionou para o meu vs2013 (eu já tive isso).

"executar sem depuração" não é uma opção, pois não desejo alternar entre depuração e exibição de saída.

Eu terminei com

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

Solução usada no qtcreator pré 2.6. Agora, enquanto qt está crescendo, o vs está indo para outro caminho. Pelo que me lembro, no vs2008 não precisávamos de tais truques.

10
fantastory

Aqui está uma solução que (1) não requer alterações de código ou pontos de interrupção, e (2) pausas após o término do programa para que você possa ver everything que foi impresso. Ele fará uma pausa após F5 ou Ctrl + F5. A principal desvantagem é que no VS2013 Express (como testado), ele não carrega símbolos, então a depuração é muito restrita.

  1. Crie um arquivo em lotes. Eu chamei meu runthenpause.bat, com o seguinte conteúdo:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

    A primeira linha irá executar o comando que você fornecer e até oito argumentos. A segunda linha vai ... pausa.

  2. Abra as propriedades do projeto | Propriedades de configuração | Depuração.

  3. Altere "Argumentos de Comando" para $(TargetPath) (ou o que estiver em "Command").
  4. Mude "Command" para o caminho completo para runthenpause.bat.
  5. Clique em OK.

Agora, quando você executar, runthenpause.bat iniciará seu aplicativo e, depois que seu aplicativo for finalizado, fará uma pausa para você ver a saída do console.

Vou postar uma atualização se descobrir como obter os símbolos carregados. Eu tentei /Z7 por this mas sem sucesso.

7
cxw

basta colocar como sua última linha de código:

system("pause");
5
RefaelJan

Basta pressionar CNTRL + F5 para abri-lo em uma janela de linha de comando externa (o Visual Studio não tem controle sobre ele).

Se isso não funcionar, adicione o seguinte ao final do seu código:

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Esta espera para você pressionar uma tecla para fechar a janela do terminal, uma vez que o código chegou ao fim.

Se você quiser fazer isso em vários lugares, coloque o código acima em um método (por exemplo, private void Pause()) e chame Pause() sempre que um programa atingir um possível fim.

2
carefulnow1

adicione “| pause ”na caixa de argumentos de comando na seção de depuração nas propriedades do projeto.

2
theambient

Use:

  1. cin.get();

ou

  1. system("pause");

Certifique-se de fazer qualquer um deles no final da função main() e antes da instrução return.

2
AAEM

Você pode executar o seu executável a partir de um prompt de comando. Desta forma, você pode ver toda a saída. Ou você poderia fazer algo assim:

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

e desta forma a janela não fecha até que você insira dados para a variável a.

2
Geo

Uma solução um pouco melhor:

atexit([] { system("PAUSE"); });

no início do seu programa.

Prós:

  • pode usar std :: exit ()
  • pode ter vários retornos do principal
  • você pode rodar seu programa sob o debugger
  • IDE independente (+ SO independente se você usar o truque cin.sync(); cin.ignore(); em vez de system("pause");)

Contras:

  • tem que modificar o código
  • não fará uma pausa em std :: terminate ()
  • ainda vai acontecer no seu programa fora da sessão do IDE/depurador; você pode evitar isso no Windows usando:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}
1
GhassanPL

A partir do Visual Studio 2017 (15.9.4), há uma opção:

Tools->Options->Debugging->Automatically close the console

O fragmento correspondente da documentação do Visual Studio :

Feche automaticamente o console quando a depuração parar:

Diz ao Visual Studio para fechar o console no final de uma sessão de depuração.

1
chronoxor

Você também pode usar esta opção

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}
0
Vladimir Salguero

No meu caso, eu experimentei isso quando criei um projeto Empty C++ na edição da comunidade VS 2017. Você precisará definir o Subsistema como "Console (/ SUBSYSTEM: CONSOLE)" em Propriedades de Configuração. 

  1. Vá para "Visualizar" e selecione "Gerenciador de propriedades"
  2. Clique com o botão direito no projeto/solução e selecione "Propriedade". Isso abre uma página de propriedades de teste
  3. Navegue até o linker e selecione "System"
  4. Clique em "SubSystem" e uma lista suspensa aparece
  5. Escolha "Console (/ SUBSYSTEM: CONSOLE)"
  6. Aplique e salve
  7. A próxima vez que você executar seu código com "CTRL + F5", você deverá ver a saída.
0
Stephen Haruna