sistema(“pausa”); – ¿Por qué está mal?

9 minutos de lectura

sistemapausa ¿Por que esta mal
falso

Aquí hay una pregunta que no entiendo muy bien:

El comando, system("pause"); se enseña a los nuevos programadores como una forma de pausar un programa y esperar a que continúe una entrada de teclado. Sin embargo, parece estar 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ás encerrado en tu habitación y nadie está mirando. Algunos dicen que vendrán personalmente a tu casa y te matarán si lo usas.

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, ¿entonces 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?

  • relacionado: stackoverflow.com/questions/900666/…

    -Gordon Gustafson

    12 de septiembre de 2010 a las 22:58

  • Aparentemente, a las personas les gusta que sus llamadas se detengan para ser realmente eficientes. En otras palabras, “¡Date prisa y detente!”

    – Lee Louviere

    18 de julio de 2011 a las 18:41

  • Te lo enseñaron porque generalmente los profesores son malos programadores

    – cuál

    19 de octubre de 2012 a las 6:59

  • Lea estos consejos sobre cómo hacer buenas preguntas: [How to Ask], [Writing the perfect question].

    – Adi Inbar

    16/11/2014 a las 19:40

Está mal visto porque es un truco específico de la plataforma que no tiene nada que ver con el aprendizaje de la programación, sino con eludir una función del IDE/OS: la ventana de la consola iniciada desde Visual Studio se cierra cuando el programa ha terminado de ejecutarse, y así el nuevo usuario no puede ver la salida de su nuevo programa.

Bodging in System (“pausa”) ejecuta el programa de “pausa” de la línea de comandos de Windows y espera a que finalice antes de continuar con 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.

  • Visual Studio puede ejecutar el programa en dos modos: con o sin depuración. Cuando se ejecuta en modo de depuración, se detendrá en el primer punto de interrupción. Si no tiene uno definido, ejecutará el programa y cerrará la consola. Entonces, si desea que el programa de la consola se detenga, simplemente establezca un punto de interrupción o, mejor aún, ejecútelo sin depurar. Eso ejecutará el programa y detendrá la consola.

    – Iván Mesic

    17 de julio de 2013 a las 8:02


  • Esta no es solo una característica de Visual Studio: si ejecuta un programa de consola desde Windows (es decir, en lugar de cargar un símbolo del sistema y ejecutarlo desde allí), también se cerrará cuando haya terminado de ejecutarse.

    – J Bentley

    26 de septiembre de 2013 a las 14:49

  • −1 Re “la ventana de la consola iniciada desde Visual Studio se cierra cuando el programa ha terminado de ejecutarse”, no, solo para cuando el programa se ejecuta en el depurador. Re “ejecuta el programa de “pausa” de la línea de comandos de Windows”, no, no existe tal (pause es un comando interno en cmd.exe). La lista de mejores ideas también es muy deficiente.

    – Saludos y hth. – alf

    10 de marzo de 2016 a las 8:19


  • Creo que esta respuesta es la única que toca el aspecto de que se trata de una solución alternativa. Funciona en torno al comportamiento de un entorno de ejecución específico que cierra una ventana de terminal antes de que pueda leer la salida del programa. Lo que debes hacer es arreglar ese entorno. Si eso no se puede hacer, use esta solución alternativa, posiblemente solo si IsDebuggerPresent() devuelve verdadero y documenta esta solución alternativa correctamente (“¿por qué está este código aquí?”).

    –Ulrich Eckhardt

    20 de febrero de 2020 a las 16:05

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 un montón de configuración y desmontaje para que su aplicación haga tal llamada, y la sobrecarga es simplemente ridícula.

¿Qué sucede si se coloca un programa llamado “pausa” en la RUTA del usuario? Simplemente 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 “Pausa()” que use _getch. Bien, claro, _getch también depende de la plataforma (nota: está definido 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 más o menos).

Básicamente: ¿por qué introducir tantos problemas potenciales cuando simplemente puede agregar dos líneas de código y una incluir y obtener un mecanismo mucho más flexible?

  • Para alguien que se queja de la dependencia de la plataforma, parece extraño sugerir _getch, especialmente cuando C++ estándar proporciona getchar.

    – pax diablo

    19 de octubre de 2012 a las 7:14


  • siento cierta ironía al calcular los gastos generales para la interacción con un humano)

    – ShPavel

    30 de septiembre de 2013 a las 14:33


  • @Spagpants: Quizás no entiendas la diferencia entre recibir información de un humano y generar imágenes y sonidos. en un humano.

    – yzt

    11 de noviembre de 2015 a las 5:01

  • @Cheersandhth.-Alf – ¿Hm? Cuando escribí esto, hace 8 años, acababa de terminar de depurar un problema causado por ‘sistema (“pausa”)’ porque el nombre ejecutable del proyecto se llamaba “pausa” y entraría en un ciclo infinito. Mi punto sigue en pie, no estoy seguro de por qué dices que estaba equivocado.

    usuario19302

    13 de enero de 2018 a las 2:27

  • @paxdiablo getchar requiere una entrada y luego presionar enter. _getch requiere solo presionar una tecla sin importar qué tecla sea. Para emular _getch en Linux, necesita 5-6 líneas de código para cambiar el modo de consola y luego volver a cambiarlo a su valor predeterminado. No es lo mismo, hace cosas diferentes. getchar no reemplaza a _getch.

    – Barnack

    30 oct 2019 a las 23:58

  • lento: tiene que pasar por muchos códigos de Windows innecesarios y un programa separado para una operación simple
  • no portátil: depende del programa de pausa
  • no es un buen estilo: hacer una llamada al sistema solo debe hacerse cuando De Verdad necesario
  • más tipeo: System(“pause”) es más largo que getchar()

un simple getchar() debería funcionar bien.

Utilizando system("pause"); es Ungood Practice™ porque

  • es completamente innecesario.
    Para mantener abierta la ventana de la consola del programa al final cuando lo ejecuta desde Visual Studio, use control+F5 para ejecutarlo sin depurar, o colocar un punto de interrupción en la última llave derecha } de main. Entonces, no hay problema en Visual Studio. Y, por supuesto, no hay ningún problema cuando lo ejecuta desde la línea de comandos.

  • Es problemático y molesto.
    cuando ejecuta el programa desde la línea de comando. Para la ejecución interactiva, debe presionar una tecla al final sin ningún propósito. Y para uso en la automatización de alguna tarea que pause es muy indeseable!

  • No es portátil.
    Unix-land no tiene estándar pause mando.

los pause el comando es interno cmd.exe comando 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 invoca system está en posición de hacer por sí mismo todo lo que el intérprete de comandos puede hacer, y más). Además, si bien esta forma de hacer una pausa es extremadamente ineficiente según los estándares habituales de la 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") o cualquier otro comando de espera al final de tu maines el primer punto anterior: es completamente innecesario, no sirve absolutamente para nada, es simplemente muy tonto.

1647587831 485 sistemapausa ¿Por que esta mal
Juan T.

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 System (“PAUSE”) porque quieren que el programa espere hasta que presionen enter para poder ver su salida. Si desea que un programa espere la entrada, existen funciones integradas para eso que también son multiplataforma y menos exigentes.

Mayor explicación en esta artículo.

  • ¡Vaya, tú otra vez! ¿vive usted aquí? lol De todos modos, gracias, voy a hacer un poco de lectura. Mientras tanto, ¿cuál es TUS pensamientos sobre este asunto?

    – Falsificar

    10 de julio de 2009 a las 4:38

  • Tuve esta misma pregunta cuando comencé C hace unos años, y me señalaron ese mismo artículo. Yo uso getchar() personalmente.

    – Juan T.

    10 de julio de 2009 a las 4:39

  • Guau… No he hecho C++ por un tiempo, pero sí… definitivamente hay mejores formas de lograr los mismos resultados.

    – Newtopiano

    10 de julio de 2009 a las 5:04

sistemapausa ¿Por que esta mal
dorio

Puedes usar std::cin.get() desde iostream:

#include <iostream> // std::cout, std::cin
using namespace std;

int main() {
   do {
     cout << '\n' << "Press the Enter key to continue.";
   } while (cin.get() != '\n');

   return 0;
}

Además, system('pause') es lento e incluye un archivo que probablemente no necesite: stdlib.h. Depende de la plataforma y, de hecho, llama a un sistema operativo ‘virtual’.

  • ¡Vaya, tú otra vez! ¿vive usted aquí? lol De todos modos, gracias, voy a hacer un poco de lectura. Mientras tanto, ¿cuál es TUS pensamientos sobre este asunto?

    – Falsificar

    10 de julio de 2009 a las 4:38

  • Tuve esta misma pregunta cuando comencé C hace unos años, y me señalaron ese mismo artículo. Yo uso getchar() personalmente.

    – Juan T.

    10 de julio de 2009 a las 4:39

  • Guau… No he hecho C++ por un tiempo, pero sí… definitivamente hay mejores formas de lograr los mismos resultados.

    – Newtopiano

    10 de julio de 2009 a las 5:04

1647587832 102 sistemapausa ¿Por que esta mal
Feliérix

Porque no es portátil.
pause El comando es un programa solo para Windows/DOS, por lo que este código no se ejecutará en Linux/macOS. Es más, system generalmente no se considera una muy buena manera de llamar a otro programa; por lo general, es mejor usar CreateProcess o fork o algo similar.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad