Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

Programa en C que no lee el teclado con fgets()

hdch

Mi duda es porque no me lee el teclado cuando llega a fgets y salta directamente al siguiente mensaje sin parar.

int main()
{
char nombre[10];
char apellidos [20];

		printf("Cual es su nombre : ");
		scanf("%s",nombre);

		printf("\nY sus apellidos : ");
		fgets(apellidos,20,stdin); //no me lee el teclado y no lo entiendo

		printf("Su nombre completo es : %s %s",nombre,apellidos);
}

y lo que me sale al ejecutar es así

hdch@HdCh:~/Escritorio$ ./a.out
Cual es su nombre : BandaAncha

Y sus apellidos : Su nombre completo es : BandaAncha

No lo entiendo, que tengo mal?

BocaDePez
BocaDePez
1

scanf deja un \n (el intro que pulsas tras poner tu nombre) en el búfer, fgets lo lee y directamente salta a la siguiente línea.

La solución chapucera es poner un fflush(stdin) tras el scanf, pero la verdad es que el scanf no se debe usar para leer entrada del usuario. Para hacer eso sólo deberías usar fgets.

🗨️ 1
hdch
1

Ahhhh vale vale o sea a fgets le llega solo \n lo lee y por eso no hace nada. Gracias, pues vaya quien lo ha escrito porque lo copie de un libro de C para practicar.

BocaDePez
BocaDePez

Necesitas hacer un segundo scanf

🗨️ 1
hdch

Yaa lo arregle poniendo en las dos partes Fgets y fuera

                printf("Cual es su nombre : ");
		fgets(nombre,10,stdin);

		printf("Y sus apellidos : ");
		fgets(apellidos,20,stdin); //no me lee el teclado y no lo entiendo

		printf("Su nombre completo es : %s %s",nombre,apellidos);