elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] Forma para pausar un programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Forma para pausar un programa  (Leído 6,478 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
[Solucionado] Forma para pausar un programa
« en: 27 Septiembre 2012, 17:45 pm »

Pues haciendo algunos programas tontos para coger practica me ha surgido una duda, mil veces en el foro han dicho que llamar al sistema para realizar una pausa es una mala practica:

Código
  1. system("PAUSE");

Y yo como bueno aprendiz que soy  :xD hago caso, intento evitarla.

acabo de hacer este programa desde cero yo solo, solo por aburrimiento:

Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.  
  8.    scanf("%s", cadena);
  9.  
  10.    for (i=0;cadena [i]!='\0';i++);
  11.  
  12.    printf ("\nEl texto tiene %d caracteres.\n",i);
  13.  
  14.  
  15.    getchar();
  16.  
  17.    return 0;
  18. }

El programa funciona pefectamente, el problema es que al final no se para, y la unica forma que se me ocurre es poniendo dos veces la linea:

Código

O limpiando el bufer de entrada asi:

Código
  1. fflush(stdin);

Pero es que tambien he leido muchas veces que limpiar el bufer de esa manera tambien es una mala practica porque puede comportarse de forma erronea. Entonces queria saber la forma correcta y limpia para parar el programa, no solo ese, sino tambien otro cualquiera.

Saludos


« Última modificación: 27 Septiembre 2012, 22:01 pm por Caster » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Forma para pausar un programa
« Respuesta #1 en: 27 Septiembre 2012, 17:49 pm »

Personalmente, me gusta usar dos veces getchar(). El primero para limpiar el buffer y el segundo para pausar el programa. Sí, la función no está hecha específicamiente para limpiar el buffer, pero me gusta más que fflush(stdin) y cumple bien con lo que quieres hacer.

Un saludo.


En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Forma para pausar un programa
« Respuesta #2 en: 27 Septiembre 2012, 17:51 pm »

Cumple la función si, y yo también lo prefiero antes que la otra opción, pero yo lo que busco es algo específicamente para eso, y si no lo hay, pues tendré que usarlo de esa manera.

Saludos.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Forma para pausar un programa
« Respuesta #3 en: 27 Septiembre 2012, 17:55 pm »

Pues a parte de system("PAUSE") no hay más funciones específicas para pausar el programa.

Otra solución a parte de la de getchar() es usar un IDE que pause solo el programa (Codeblocks es uno de los que conozco que hace esto).

Un saludo.
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Forma para pausar un programa
« Respuesta #4 en: 27 Septiembre 2012, 17:57 pm »

Yo es que uso el Sublime Text 2 para escribir el código y después compilo por consola con MinGW.

¿Estás seguro de que no existen otras funciones?

Saludos.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Forma para pausar un programa
« Respuesta #5 en: 27 Septiembre 2012, 18:14 pm »


Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.  
  8.    scanf("%s", cadena);
  9.  
  10.    for (i=0;cadena [i]!='\0';i++);
  11.  
  12.    printf ("\nEl texto tiene %d caracteres.\n",i);
  13.    printf ("\nPresione ENTER para salir:");
  14.    while (getchar()!='\n')
  15.        ;
  16.    return 0;
  17. }
Saludos
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Forma para pausar un programa
« Respuesta #6 en: 27 Septiembre 2012, 18:27 pm »

Lo he compilado y el programa no se pausa, se cierra. Creo que esto ocurre porque para introducir la cadena de caracteres hay que presionar enter, entonces queda guardado en el bufer como salto de linea y al ejecutarse el bucle while automáticamente ya sale.

Aunque no funcione este el tipo de solución que yo buscaba, gracias.

Saludos
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Forma para pausar un programa
« Respuesta #7 en: 27 Septiembre 2012, 19:22 pm »

Lo he compilado y el programa no se pausa, se cierra.
Citar
Creo que no te has fijado bien en el punto y coma ";" después del while. Este es el que "obliga" al programa a esperar el ENTER para cerrar.
Saludos
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Forma para pausar un programa
« Respuesta #8 en: 27 Septiembre 2012, 19:26 pm »

Lo he copiado exactamente igual que aquí. Sigue sin pararse.

Saludos
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Forma para pausar un programa
« Respuesta #9 en: 27 Septiembre 2012, 19:47 pm »

Lo he copiado exactamente igual que aquí. Sigue sin pararse.

Citar
Pues no lo entiendo. Lo he probado en Code::Blocks, en Dev-C++ y en Pelles C y en todos funciona.
Ahora lo entiendo, estaba usando gets en lugar de scanf:
Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.  
  8.    gets( cadena);
  9.  
  10.    for (i=0;cadena [i]!='\0';i++);
  11.  
  12.    printf ("\nEl texto tiene %d caracteres.\n",i);
  13.    printf ("\nPresione ENTER para salir:");
  14.    while (getchar()!='\n')
  15.        ;
  16.    return 0;
  17. }
Para que no te pase lo del scanf, usalo de este modo ... se come el "\n":
Código
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.  
  5.    int i;
  6.    char cadena [80];
  7.    scanf("%s%*c", cadena);
  8.    for (i=0;cadena [i]!='\0';i++);
  9.    printf ("\nEl texto tiene %d caracteres.\n",i);
  10.    printf ("\nPresione ENTER para salir:");
  11.    while (getchar()!='\n')
  12.        ;
  13.    return 0;
  14. }
  15.  
Saludos
« Última modificación: 28 Septiembre 2012, 13:37 pm por leosansan » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines