Posible duplicado:
¿Cómo permite que se ingresen espacios usando scanf?
printf (“escriba el título del libro \ n”); scanf (“% s”, bookname);
Dentro de los datos así: – Progtwigción C
pero ¿por qué generar los datos de esta manera: – C
perder la progtwigción (cuerdas)?
por qué
Gracias.
El especificador de conversión %s
hace que scanf
detenga en el primer carácter de espacio en blanco. Si necesita poder leer caracteres de espacio en blanco, deberá usar el %[
especificador de conversión, como
scanf("%[^\n]", bookname);
que leerá todo hasta el siguiente carácter de nueva línea y lo almacenará en bookname
, aunque para estar seguro debe especificar la longitud máxima de bookname en el especificador de conversión; por ejemplo, si bookname tiene espacio para 30 caracteres contando el terminador nulo, debe escribir
scanf("%29[^\n]", bookname);
De lo contrario, podrías usar fgets()
:
fgets(bookname, sizeof bookname, stdin);
Prefiero la solución fgets()
, personalmente.
Use fgets()
lugar de scanf()
Bueno, bookname
es una especie de char 😉 El punto es que scanf
en esta forma se detiene en el primer carácter de espacio en blanco.
Puede usar una cadena de formato diferente, pero en este caso, probablemente debería preferir usar fgets
.
scanf
realmente debería usarse para la entrada “formateada”.