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?

Foi útil?

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 returnpecado 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top