[ Foro de C ]
me he apuntado recientemente al curso y estoy haciendo los ejercicios propuestos pero al llegar al numero 18 que dice: Pida al usuario un número entero y una letra, y muestre en pantalla la letra repetida tantas veces como indique el número. Por ejemplo, si el número es 10 y la letra es a, aparecería
aaaaaaaaaa.
lo he hecho asi:
#include <stdio.h>
int main()
{
int num,i;
char c;
printf("Introduce el numero: ");
scanf("%d",&num);
printf("\nIntroduce el caracter: ");
fflush(stdin);
scanf("%c",&c);
for(i=0;i<num;i++)
{
printf("%c",c);
}
return 0;
}
el programa compila y se ejecuta normalmente lo que pasa es que cuando quiero introducir el caracter no me deja y se termina el programa no se porque. Solo funciona cuando lo leo como %s.esta programado en linux. tendra algo que ver?. espero vuestra ayuda.
Sí, fflush, que en teoría debería vaciar un buffer (en teoría, en tu caso, stdin, que es la entrada estándar), en ocasiones no funciona bien, y no absorbe esa pulsación de Intro que ha quedado en el buffer del teclado después de la lectura del número.
Ese es el riesgo cuando usas "scanf" para leer caracteres, especialmente si lo mezclas con otras cosas (como con números, en tu caso).
Este problema lo tienes comentado al final del apartado 4 de mi curso:
http://www.aprendeaprogramar.com/mod/resource/view.php?id=320
Se podría solucionar así (por ejemplo):
#include <stdio.h>
int main()
{
int num,i;
char c;
printf("Introduce el numero: ");
scanf("%d",&num);
scanf("%c",&c); /* Absorbo el avance de línea */
printf("\nIntroduce el caracter: ");
scanf("%c",&c);
for(i=0;i<num;i++)
{
printf("%c",c);
}
return 0;
}
O bien puedes leer toda una cadena con "gets" y extraer su primer carácter.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)