Aqui está uma pergunta que eu não entendo direito:
O comando system("pause");
é ensinado aos novos programadores como uma maneira de pausar um programa e aguardar a entrada do teclado continuar. No entanto, muitos programadores veteranos parecem desaprovados como algo que não deve ser feito em graus variados.
Algumas pessoas dizem que é bom usar. Alguns dizem que só deve ser usado quando você está trancado em seu quarto e ninguém está assistindo. Alguns dizem que eles pessoalmente vão à sua casa e o matam se você a usar.
Eu próprio sou um novo programador sem formação formal em programação. Eu uso porque fui ensinado a usá-lo. O que não entendo é que, se não é algo para ser usado, então por que fui ensinado a usá-lo? Ou, por outro lado, não é realmente tão ruim assim?
Quais são seus pensamentos sobre este assunto?
Respostas:
Ele é desaprovado porque é um hack específico da plataforma que não tem nada a ver com o aprendizado de programação, mas para contornar um recurso do IDE / OS - a janela do console iniciada no Visual Studio fecha quando o programa termina a execução, e assim o novo usuário não consegue ver a saída de seu novo programa.
O desvio no sistema ("pausa") executa o programa "pausa" da linha de comando do Windows e aguarda o término antes de continuar a execução do programa - a janela do console permanece aberta para que você possa ler a saída.
Uma idéia melhor seria colocar um ponto de interrupção no final e depurá-lo, mas isso novamente tem problemas.
fonte
pause
existe um comando internocmd.exe
). A lista de melhores idéias também está em falta.IsDebuggerPresent()
retornar true e documente essa solução alternativa ("por que esse código está aqui?").É lento. Depende da plataforma. É inseguro.
Primeiro: o que faz. Chamar "sistema" é literalmente como digitar um comando no prompt de comando do Windows. Há uma tonelada de configurações e desmontagens para o seu aplicativo fazer essa ligação - e a sobrecarga é simplesmente ridícula.
E se um programa chamado "pausa" fosse colocado no PATH do usuário? Apenas chamar o sistema ("pausa") garante apenas que um programa chamado "pausa" seja executado (espero que você não tenha o seu executável chamado "pausa"!)
Simplesmente escreva sua própria função "Pause ()" que usa _getch. OK, claro, _getch também depende da plataforma (observe: está definido em "conio.h") - mas é muito melhor do que
system()
se você estiver desenvolvendo no Windows e tem o mesmo efeito (embora seja sua responsabilidade fornecer o texto com cout ou mais).Basicamente: por que apresentar tantos problemas em potencial quando você pode simplesmente adicionar duas linhas de código e uma incluir e obter um mecanismo muito mais flexível?
fonte
_getch
, especialmente quando o C ++ padrão fornecegetchar
.um simples getchar () deve funcionar perfeitamente.
fonte
Usar não
system("pause");
é uma boa prática ™ porqueÉ completamente desnecessário .
Para manter a janela do console do programa aberta no final, quando você o executa no Visual Studio, use Ctrl+ F5para executá-lo sem depuração, ou coloque um ponto de interrupção no último colchete direito
}
demain
. Portanto, não há problema no Visual Studio. E, claro, não há problema algum quando você o executa na linha de comando.É problemático e irritante
quando você executa o programa na linha de comando. Para execução interativa, você precisa pressionar uma tecla no final, sem nenhum objetivo. E para uso na automação de alguma tarefa que
pause
é muito indesejada!Não é portátil.
O Unix-land não possui
pause
comando padrão .O
pause
comando é umcmd.exe
comando interno e não pode ser substituído, como é reivindicado erroneamente em pelo menos uma outra resposta. Ou seja, não é um risco à segurança, e a alegação de que os programas AV o diagnosticam como tal é tão dúbia quanto a alegação de substituir o comando (afinal, um programa em C ++system
está em posição de fazer tudo o que o intérprete de comando pode fazer, e Mais). Além disso, embora essa maneira de pausar seja extremamente ineficiente pelos padrões usuais da programação em C ++, isso não importa no final do programa de um novato.Portanto, as alegações na horda de respostas anteriores não estão corretas, e o principal motivo para você não usar
system("pause")
ou qualquer outro comando de espera no final do seumain
é o primeiro ponto acima: é completamente desnecessário, não serve para nada , é apenas muito bobo.fonte
Em resumo, ele precisa pausar a execução dos programas e fazer uma chamada do sistema e alocar recursos desnecessários quando você pode usar algo tão simples quanto o cin.get (). As pessoas usam o System ("PAUSE") porque desejam que o programa aguarde até pressionar Enter para poder ver sua saída. Se você deseja que um programa aguarde entrada, há funções integradas para as que também são multiplataforma e menos exigentes.
Mais explicações neste artigo.
fonte
Você pode usar
std::cin.get()
emiostream
:Além disso,
system('pause')
é lento, e inclui um arquivo que você provavelmente não precisa:stdlib.h
. Depende da plataforma e, na verdade, chama um sistema operacional 'virtual'.fonte
System("pause")
em um curso de programação do primeiro ano, mas queria poder executar meus programas no meu Mac, então tive que aprendercin.get()
.Porque não é portátil.
é um programa somente para Windows / DOS, portanto esse código não será executado no Linux. Além disso,
system
não é geralmente considerado como uma boa maneira de chamar outro programa - é geralmente melhor usarCreateProcess
oufork
ou algo similar.fonte
Conforme listado nas outras respostas, há muitos motivos para você evitar isso. Tudo se resume a uma razão que faz o resto discutível. o
System()
função é inerentemente insegura / não confiável e não deve ser introduzida em um programa, a menos que seja necessário.Para uma tarefa de estudante, essa condição nunca foi atendida e, por esse motivo, eu falharia em uma tarefa sem nem mesmo executar o programa se uma chamada para esse método estivesse presente. (Isso ficou claro desde o início.)
fonte
Para mim, não faz sentido, em geral, esperar antes de sair sem motivo. Um programa que fez seu trabalho deve terminar e entregar seus recursos de volta ao seu criador.
Também não se espera silenciosamente em um canto escuro depois de um dia de trabalho, à espera de alguém dar uma gorjeta no ombro.
fonte
system("pause")
por si só não exibe nada. Um programa de interface de linha de comando que não é chamado a partir da linha de comando e fecha muito cedo é chamado incorretamente e com as opções erradas, e usarsystem("pause")
para contornar um programa chamado incorretamente não é realmente a coisa certa a fazer.cat
,less
,vi
,OpenOffice
,Mathematica
,GNU Octave
, o que se usariasystem("pause")
? Isso seria chato.system("pause")
, enquanto sua resposta fala sobre "espere antes de sair", que é um conceito muito mais generalizado. Muitos dos exemplos que você deu de fato "esperam antes de sair", até que o usuário informe ao programa que ele deseja que ele saia. Concordo quesystem("pause")
não é uma boa maneira de conseguir isso e que existem soluções melhores, mas não é isso que sua resposta diz.pause
embora!está errado porque faz parte da API do Windows e, portanto, não funciona em outros sistemas operacionais.
Você deve tentar usar apenas objetos da biblioteca padrão C ++. Uma solução melhor será escrever:
Mas também causará problemas se você tiver outros
cin
s no seu código. Porque depois de cadacin
, você vai tocar em umEnter
ou\n
que é um caractere espaço em branco.cin
ignora esse caractere e o deixa na zona de buffer, mascin.get()
obtém esse caractere restante. Portanto, o controle do programa atinge a linhareturn 0
e o console é fechado antes de permitir que você veja os resultados.Para resolver isso, escrevemos o código da seguinte maneira:
fonte
system()
é padrão e não específico para o MS Windows. No entanto, opause
comando shell é uma herança do DOS e normalmente só é encontrado lá.Aqui está um motivo pelo qual você não deve usá-lo: ele vai irritar a maioria dos programas antivírus em execução no Windows se você estiver passando o programa para outra máquina porque é uma ameaça à segurança. Mesmo se o seu programa consistir apenas em um
cout << "hello world\n"; system("pause");
recurso É pesado e o programa obtiver acesso ao comando cmd, que os antivírus consideram uma ameaça.fonte
os profissionais estão usando o sistema ("PAUSE"); enquanto a criação de pequenas partes do seu programa é para depuração você mesmo. se você o usar para obter resultados de variáveis antes, durante e após cada processo que estiver usando, para garantir que eles estejam funcionando corretamente.
Após testar e movê-lo em pleno andamento com o restante da solução, você deve remover essas linhas. é realmente bom ao testar um algoritmo definido pelo usuário e garantir que você esteja fazendo as coisas na ordem correta para obter os resultados desejados.
De maneira alguma você deseja usá-lo em um aplicativo após testá-lo e garantir que está funcionando corretamente. No entanto, permite acompanhar tudo o que está acontecendo à medida que acontece. Não use para aplicativos de usuário final.
fonte
É tudo uma questão de estilo. É útil para depuração, mas, caso contrário, não deve ser usado na versão final do programa. Realmente não importa no problema da memória, porque tenho certeza de que aqueles que inventaram o sistema ("pausa") estavam prevendo que ele seria usado com frequência. Em outra perspectiva, os computadores ficam limitados à memória por todo o resto que usamos no computador, e isso não representa uma ameaça direta, como a alocação dinâmica de memória; portanto, eu o recomendaria para a depuração de código, mas nada mais.
fonte
pause
foi projetado para uso em programas em lote do DOS, nunca foi planejado para ser usado de uma maneira como esta. Além disso, havia alternativas muito melhores antes que alguém fosse louco o suficiente para digitar a frasesystem("pause");
.