Aquí hay una pregunta que no entiendo del todo:
El comando system("pause");
se enseña a los nuevos programadores como una forma de pausar un programa y esperar a que continúe la entrada del teclado. Sin embargo, parece ser mal visto por muchos programadores veteranos como algo que no debe hacerse en diversos grados.
Algunas personas dicen que está bien usarlo. Algunos dicen que solo debe usarse cuando está encerrado en su habitación y nadie lo está mirando. Algunos dicen que vendrán personalmente a su casa y lo matarán si lo usa.
Yo mismo soy un nuevo programador sin entrenamiento formal en programación. Lo uso porque me enseñaron a usarlo. Lo que no entiendo es que si no es algo para usar, ¿por qué me enseñaron a usarlo? O, por otro lado, ¿no es realmente tan malo después de todo?
¿Que piensas de este tema?
Respuestas:
Está mal visto porque es un truco específico de la plataforma que no tiene nada que ver con el aprendizaje real de la programación, sino que evita una característica del IDE / OS: la ventana de la consola lanzada desde Visual Studio se cierra cuando el programa ha finalizado la ejecución, y así el nuevo usuario no puede ver la salida de su nuevo programa.
Bodging in System ("pausa") ejecuta el programa "pausa" de la línea de comandos de Windows y espera a que termine antes de continuar la ejecución del programa; la ventana de la consola permanece abierta para que pueda leer la salida.
Una mejor idea sería poner un punto de interrupción al final y depurarlo, pero eso nuevamente tiene problemas.
fuente
pause
es un comando interno encmd.exe
). La lista de mejores ideas también es muy escasa.IsDebuggerPresent()
devuelve verdadero y documente esta solución adecuada ("¿por qué está este código aquí?").Es lento. Depende de la plataforma. Es inseguro
Primero: lo que hace. Llamar "sistema" es literalmente como escribir un comando en el símbolo del sistema de Windows. Hay una tonelada de configuración y desmontaje para que su aplicación realice dicha llamada, y los gastos generales son simplemente ridículos.
¿Qué pasa si un programa llamado "pausa" se colocó en la RUTA del usuario? Solo llamar al sistema ("pausa") solo garantiza que se ejecute un programa llamado "pausa" (¡espero que no tenga su ejecutable llamado "pausa"!)
Simplemente escriba su propia función "Pause ()" que use _getch. OK, claro, _getch también depende de la plataforma (nota: se define en "conio.h"), pero es mucho mejor que
system()
si está desarrollando en Windows y tiene el mismo efecto (aunque es su responsabilidad proporcionar el texto con cout más o menos).Básicamente: ¿por qué presentar tantos problemas potenciales cuando simplemente puede agregar dos líneas de código y una incluir y obtener un mecanismo mucho más flexible?
fuente
_getch
, especialmente cuando proporciona C ++ estándargetchar
.un simple getchar () debería funcionar bien.
fuente
Usar
system("pause");
es Ungood Practice ™ porqueEs completamente innecesario .
Para mantener abierta la ventana de la consola del programa al final cuando lo ejecuta desde Visual Studio, use Ctrl+ F5para ejecutarlo sin depurar, o coloque un punto de interrupción en la última llave derecha
}
demain
. Entonces, no hay problema en Visual Studio. Y, por supuesto, no hay ningún problema cuando lo ejecutas desde la línea de comandos.Es problemático y molesto
cuando ejecuta el programa desde la línea de comandos. Para la ejecución interactiva, debe presionar una tecla al final sin ningún propósito. ¡Y para su uso en la automatización de alguna tarea que
pause
es muy indeseable!No es portátil
Unix-land no tiene un
pause
comando estándar .El
pause
comando es uncmd.exe
comando interno y no se puede anular, como se afirma erróneamente en al menos otra respuesta. Es decir, no es un riesgo de seguridad, y la afirmación de que los programas AV lo diagnostican como tal es tan dudosa como la afirmación de anular el comando (después de todo, un programa C ++ que invocasystem
está en posición de hacer todo lo que el intérprete de comandos puede hacer, y más). Además, si bien esta forma de pausa es extremadamente ineficiente según los estándares habituales de programación en C ++, eso no importa en absoluto al final del programa de un novato.Entonces, las afirmaciones en la horda de respuestas antes de esto no son correctas, y la razón principal por la que no debe usar
system("pause")
ni ningún otro comando de espera al final de sumain
, es el primer punto anterior: es completamente innecesario, no sirve para nada , es muy tonto.fuente
En resumen, tiene que pausar la ejecución de los programas y hacer una llamada al sistema y asignar recursos innecesarios cuando podría estar usando algo tan simple como cin.get (). Las personas usan el sistema ("PAUSA") porque quieren que el programa espere hasta que presionen enter para poder ver su salida. Si desea que un programa espere la entrada, hay funciones integradas para eso que también son multiplataforma y menos exigentes.
Más explicaciones en este artículo.
fuente
Puedes usar
std::cin.get()
desdeiostream
:Además,
system('pause')
es lento, e incluye un archivo es probable que no necesita:stdlib.h
. Depende de la plataforma, y en realidad llama a un sistema operativo 'virtual'.fuente
System("pause")
en un curso de programación de primer año, pero quería poder ejecutar mis programas en mi Mac, así que tuve que aprendercin.get()
.Porque no es portátil.
es un programa solo para Windows / DOS, por lo que este código no se ejecutará en Linux. Por otra parte,
system
no se considera generalmente como una muy buena manera de llamar a otro programa - por lo general es mejor usarCreateProcess
ofork
o algo similar.fuente
Como se enumera en las otras respuestas, hay muchas razones que puede encontrar para evitar esto. Todo se reduce a una razón que hace que el resto sea discutible. La
System()
función es inherentemente insegura / no confiable, y no debe introducirse en un programa a menos que sea necesario.Para una tarea de estudiante, esta condición nunca se cumplió y, por esta razón, fallaría una tarea sin siquiera ejecutar el programa si hubiera una llamada a este método. (Esto quedó claro desde el principio).
fuente
Para mí no tiene sentido en general esperar antes de salir sin razón. Un programa que ha hecho su trabajo debería terminar y entregar sus recursos a su creador.
Tampoco uno espera en silencio en un rincón oscuro después de un día de trabajo, esperando que alguien le incline el hombro.
fuente
system("pause")
en sí mismo no muestra nada. Un programa de interfaz de línea de comando que se invoca no desde la línea de comando y se cierra demasiado temprano se invoca incorrectamente y con las opciones incorrectas, y usarsystem("pause")
para eludir un programa invocado incorrectamente realmente no es lo correcto.cat
,less
,vi
,OpenOffice
,Mathematica
,GNU Octave
, lo que si se usaríasystem("pause")
? Eso sería molesto.system("pause")
, mientras que tu respuesta habla de "esperar antes de salir", que es un concepto mucho más generalizado. De hecho, muchos de los ejemplos que dio "esperen antes de salir", hasta que el usuario informe al programa que desea que salga. Estoy de acuerdo en quesystem("pause")
no es una buena manera de lograrlo y que hay mejores soluciones, pero eso no es lo que dice su respuesta.pause
¡fuera!está mal porque es parte de la API de Windows y, por lo tanto, no funcionará en otros sistemas operativos.
Debe intentar usar solo objetos de la biblioteca estándar de C ++. Una mejor solución será escribir:
Pero también causará problemas si tiene otros
cin
s en su código. Porque después de cada unocin
, tocarás unEnter
o\n
que es un carácter de espacio en blanco.cin
ignora este carácter y lo deja en la zona de amortiguación, perocin.get()
obtiene este carácter restante. Entonces el control del programa llega a la líneareturn 0
y la consola se cierra antes de permitirle ver los resultados.Para resolver esto, escribimos el código de la siguiente manera:
fuente
system()
es estándar y no es específico de MS Windows. Sin embargo, elpause
comando de shell es una herencia de DOS y normalmente solo se encuentra allí.Aquí hay una razón por la que no debe usarlo: va a molestar a la mayoría de los programas antivirus que se ejecutan en Windows si está pasando el programa a otra máquina porque es una amenaza para la seguridad. Incluso si su programa solo consta de un
cout << "hello world\n"; system("pause");
recurso simple de recursos pesados y el programa obtiene acceso al comando cmd, que los antivirus ven como una amenaza.fuente
los pro para usar el sistema ("PAUSA"); mientras crea pequeñas porciones de su programa es para depurarlo usted mismo. si lo utiliza para obtener resultados de variables antes, durante y después de cada proceso que está utilizando para asegurarse de que funcionan correctamente.
Después de probar y moverlo a pleno rendimiento con el resto de la solución, debe eliminar estas líneas. es realmente bueno al probar un algoritmo definido por el usuario y asegurarse de que está haciendo las cosas en el orden correcto para obtener los resultados que desea.
De ninguna manera quiere usar esto en una aplicación después de haberlo probado y asegurado que está funcionando correctamente. Sin embargo, le permite realizar un seguimiento de todo lo que sucede a medida que sucede. No lo use para aplicaciones de usuario final en absoluto.
fuente
Todo es cuestión de estilo. Es útil para la depuración, pero de lo contrario no debería usarse en la versión final del programa. Realmente no importa el problema de la memoria porque estoy seguro de que aquellos que inventaron el sistema ("pausa") anticipaban que se usaría con frecuencia. En otra perspectiva, las computadoras se estrangulan en su memoria para todo lo demás que usamos en la computadora de todos modos y no representa una amenaza directa como la asignación de memoria dinámica, por lo que lo recomendaría para depurar código, pero nada más.
fuente
pause
fue diseñado para su uso en programas por lotes de DOS, nunca fue pensado para ser utilizado de esta manera. Además, había alternativas mucho mejores antes de que alguien estuviera lo suficientemente loco como para escribir la frasesystem("pause");
.