Título: [Solucionado] Forma para pausar un programa Publicado por: Caster 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 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
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 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 Título: Re: Forma para pausar un programa Publicado por: DickGumshoe 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. Título: Re: Forma para pausar un programa Publicado por: Caster 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. Título: Re: Forma para pausar un programa Publicado por: DickGumshoe 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. Título: Re: Forma para pausar un programa Publicado por: Caster 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. Título: Re: Forma para pausar un programa Publicado por: leosansan en 27 Septiembre 2012, 18:14 pm Saludos
Título: Re: Forma para pausar un programa Publicado por: Caster 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 Título: Re: Forma para pausar un programa Publicado por: leosansan 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 Título: Re: Forma para pausar un programa Publicado por: Caster en 27 Septiembre 2012, 19:26 pm Lo he copiado exactamente igual que aquí. Sigue sin pararse.
Saludos Título: Re: Forma para pausar un programa Publicado por: leosansan 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 Para que no te pase lo del scanf, usalo de este modo ... se come el "\n": Código Saludos Título: Re: Forma para pausar un programa Publicado por: Caster en 27 Septiembre 2012, 22:00 pm Lo acabo de compilar y funciona perfectamente, duda resuelta. Muchísimas gracias.
Saludos. Título: Re: Forma para pausar un programa Publicado por: rir3760 en 28 Septiembre 2012, 02:12 am Dos comentarios en relaciona los programas de leosansan:
1) Se debe evitar el uso de la función "gets", el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html). 2) Es un error utilizar la función "scanf" en esta forma: Código Ya que la cadena de formato "%s%c" indica que el carácter sera almacenado en la dirección en memoria indicada por el tercer argumento, el problema es que este no existe. En su lugar se debe pasar una dirección de memoria valida o bien utilizar "%*c" para indicar que el carácter sera descartado. Un saludo Título: Re: [Solucionado] Forma para pausar un programa Publicado por: -r3- en 28 Septiembre 2012, 16:52 pm Creo que el tema ya ha sido solucionado, pero tengo una pregunta, quizás yo esté mal, recién empiezo con C.
En la parte del for(i = 0; cadena != '\0'; ++i); Por qué pones el punto y coma al final? Según mi libro al final del -for- no debería ir eso. Código: #include <stdio.h> Yo lo hice así, lo compilé con gcc para windows y funciona, al final del programa se pausa, aplasto una tecla y finaliza... Título: Re: [Solucionado] Forma para pausar un programa Publicado por: xiruko en 28 Septiembre 2012, 17:21 pm 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. :huh: el ";" no es para nada mas que para acabar el bloque del while sin ninguna sentencia dentro de el. Código esto se hace para limpiar el bufer de entrada stdin. se ha comentado muchas veces en el foro pero lo repetire una vez mas. funciones como scanf() dejan basura en el bufer de entrada. si lo usas para leer un entero, e introduces por ejemplo "23ab", scanf() leera el "23" y el "ab\n" se quedara en el bufer de entrada. usando esta sentencia del while, limpias el bufer ya que descarta los caracteres hasta encontrarse el de salto de linea, el cual tambien lo descarta. asi luego puedes usar otras funciones como fgets() sin problemas. Citar En la parte del for(i = 0; cadena != '\0'; ++i); Por qué pones el punto y coma al final? Según mi libro al final del -for- no debería ir eso. es el mismo caso que antes. cuando el for tiene sentencias dentro de el se usan "{}", en cambio si no tiene ninguna sentencia dentro tienes que indicar de alguna manera que el for se acaba, y se hace con ";". de hecho, tambien podrias hacerlo asi: Código
o incluso asi: Código
y todas funcionarian. un saludo! Título: Re: [Solucionado] Forma para pausar un programa Publicado por: Caster en 28 Septiembre 2012, 23:17 pm Añado algo:
Es recomendable usar esto: Código
Despues de cada scanf para limpiar siempre el bufer. Aunque para evitart tener que cargar mucho el codigo de esto, es mejor aprender a utilizar otras funciones como por ejemplo: fgets(). Saludos |