Discussion:
Hacer una pausa para controlar el Scroll de pantalla
(demasiado antiguo para responder)
Kuky
2004-01-13 22:05:43 UTC
Permalink
Hola amigos, me gustaria saber como puedo hacer una pausa en lenguaje
C.. es decir, necesito listar por pantalla una serie d caracteres y
quiero que el sistema haga una pausa cada 20 lineas por ejemplo.

Pongo un ejemplo:

#include <stdio.h>
int main()
{
int i;
for ( i=0 ; i<100 ; i++ )
{
printf( "Hola\n" );
}
}

Imagemos que quiero hacer una pausa cada 20 lineas y asi poder ir
leyendo todos los Holas... es posible? Gracias!
Fernando Arbeiza
2004-01-13 23:19:11 UTC
Permalink
Post by Kuky
printf( "Hola\n" );
Para imprimir una cadena de caracteres, mejor utiliza puts() y fputs(),
printf() es mejor utilizarla para salida formateada. De todas formas, si
utilizas printf() utilízalo como:

printf("%s", "Hola\n");

Con (f)puts() y de esta última forma, ya no tienes que preocuparte por
los '%' que se te escapen.

Por último, un pequeño comentario sobre el estilo (Ojo, esto es
*subjetivo*). Me parece poco legible con tanta sangría.
Post by Kuky
Imagemos que quiero hacer una pausa cada 20 lineas y asi poder ir
leyendo todos los Holas... es posible? Gracias!
Pues si es posible. Te doy una respuesta, pero si esperabas algo más
elaborado creo que es porque no precisaste lo suficiente:

/*****************/
#include <stdio.h>

#define NUM_LINEAS 20

static void pausa_cada_veinte(void) {
static unsigned int j = 0;

j++;
if (NUM_LINEAS <= j) {
puts(" -- Pulse Enter para continuar -- ");
getchar();
j = 0;
}
}

int main(void) {
unsigned int i;

for (i = 0 ; i < 128; i++) {
puts("Hola");
pausa_cada_veinte();
}

return 0;
}
/*****************/

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Kuky
2004-01-14 13:01:53 UTC
Permalink
Mucas gracias por la respuesta fernando, solo un par de questiones. A
que te refieres cuando dices demasiada sangria¿ quizas tendria q hacer
el codigo mas comprimido? y que diferencia existe principalmente entre
el printf y el puts, yo pensaba que el uso de printf era correcto...
:( Un saludo de nuevo y gracias!
Post by Fernando Arbeiza
Post by Kuky
printf( "Hola\n" );
Para imprimir una cadena de caracteres, mejor utiliza puts() y fputs(),
printf() es mejor utilizarla para salida formateada. De todas formas, si
printf("%s", "Hola\n");
Con (f)puts() y de esta última forma, ya no tienes que preocuparte por
los '%' que se te escapen.
Por último, un pequeño comentario sobre el estilo (Ojo, esto es
*subjetivo*). Me parece poco legible con tanta sangría.
Post by Kuky
Imagemos que quiero hacer una pausa cada 20 lineas y asi poder ir
leyendo todos los Holas... es posible? Gracias!
Pues si es posible. Te doy una respuesta, pero si esperabas algo más
/*****************/
#include <stdio.h>
#define NUM_LINEAS 20
static void pausa_cada_veinte(void) {
static unsigned int j = 0;
j++;
if (NUM_LINEAS <= j) {
puts(" -- Pulse Enter para continuar -- ");
getchar();
j = 0;
}
}
int main(void) {
unsigned int i;
for (i = 0 ; i < 128; i++) {
puts("Hola");
pausa_cada_veinte();
}
return 0;
}
/*****************/
Un saludo.
Fernando Arbeiza
2004-01-14 13:32:22 UTC
Permalink
A que te refieres cuando dices demasiada sangria¿ quizas tendria q
hacer el codigo mas comprimido?
Lo primero es que cada uno tiene su estilo, y escoge aquel con el que se
encuentra más cómodo; pero el que has utilizado en el ejemplo
(concretamente la sangría -los espacios con que "indentas" cada línea)
me parece excesivo:

#include ...
int main(void)
{
for (...)
{
}
}

A lo que me refiero es que con dos bucles anidados, casi no te queda
espacio en la línea para escribir más. _Personalmente_ sangro con cuatro
espacios, que lo considero suficiente para que quede claro y para que
permita algo de anidación. Algo así:

#include ...

int main(void) {
for (...) {
}
}

Ahora, a cada uno que preguntes lo hará de forma distinta. Hazlo como te
resulte mejor.
y que diferencia existe principalmente entre
el printf y el puts, yo pensaba que el uso de printf era correcto...
En general, printf() es para salida formateada y puts() es para la
salida de cadenas de caracteres.

La cosa es que la cadena que espera printf es una cadena de formato,
donde los caracteres '%' son especiales. Luego si la cadena que quieres
imprimir los contiene, puedes tener problemas. Piensa en algo así:

const char *frase = "Hola al 100% del mundo";
printf(frase);

Ya tienes un problema, has introducido a printf una cadena de formato,
pero sin pasarle un argumento.

Si lo haces con puts y fputs, evitas esto. También lo evitas utilizando
la cadena de formato "%s":

const char *frase = "Hola al 100% del mundo";
printf("%s", frase);

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Leto Atreides
2004-01-14 10:02:19 UTC
Permalink
Post by Kuky
Hola amigos, me gustaria saber como puedo hacer una pausa en lenguaje
C.. es decir, necesito listar por pantalla una serie d caracteres y
quiero que el sistema haga una pausa cada 20 lineas por ejemplo.
#include <stdio.h>
#include <conio.h>
#define NUM_LINEAS 20
Post by Kuky
int main()
{
int i;
for ( i=0 ; i<100 ; i++ )
{
printf( "Hola\n" );
if((i+1)%NUM_LINEAS)
{
printf("Pulsa una tecla para continuar\n");
getch();
}
Post by Kuky
}
}
Imagemos que quiero hacer una pausa cada 20 lineas y asi poder ir
leyendo todos los Holas... es posible? Gracias!
Mikel Irazabal
2004-01-14 11:26:37 UTC
Permalink
Post by Leto Atreides
Post by Kuky
for ( i=0 ; i<100 ; i++ )
{
printf( "Hola\n" );
if((i+1)%NUM_LINEAS)
{
printf("Pulsa una tecla para continuar\n");
getch();
}
Post by Kuky
}
Eso te da pausa cada línea excepto los múltiplos de NUM_LINEAS, supongo
que querrás decir:

if(!((i+1)%NUM_LINEAS))

Saludos,

Mikel
Leto Atreides
2004-01-14 11:37:20 UTC
Permalink
Post by Mikel Irazabal
Post by Leto Atreides
Post by Kuky
for ( i=0 ; i<100 ; i++ )
{
printf( "Hola\n" );
if((i+1)%NUM_LINEAS)
{
printf("Pulsa una tecla para continuar\n");
getch();
}
Post by Kuky
}
Eso te da pausa cada línea excepto los múltiplos de NUM_LINEAS, supongo
if(!((i+1)%NUM_LINEAS))
Saludos,
Mikel
Eso :P
Loading...