C scanf con problemas de espacios

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”.