¿Cómo puedo escanear cadenas con espacios en ellas usando scanf ()?

Quiero escribir un subprogtwig en el que un usuario pueda ingresar su comentario. Utilizo scanf("%s", X) y les dejo ingresar un comentario, pero solo puede almacenar la palabra antes de una barra espaciadora en la cadena.

¿Cómo puedo resolver este problema para almacenar una oración completa en una cadena o un archivo?

Mi código se presenta a continuación:

 FILE *fp; char comment[100]; fp=fopen("comment.txt","a"); printf("You can input your comment to our system or give opinion to the musics :\n"); scanf("%s",comment); fputs(comment,fp); 

En lugar de las respuestas que le dicen que no use scanf() , puede simplemente la opción del escaneo Negated de scanf() :

 scanf("%99[^\n]",comment); // This will read into the string: comment // everything from the next 99 characters up until // it gets a newline 

scanf () con %s como especificador de formato lee una secuencia de caracteres comenzando desde el primer carácter no blanco hasta (1) otro carácter de espacio en blanco o (2) hasta el ancho de campo si se especifica (por ejemplo, scanf("%127s",str); – lee 127 caracteres y agrega el byte nulo como 128), lo que ocurra primero. Y luego agrega automáticamente el byte nulo al final. El puntero pasado mi ser lo suficientemente grande como para contener la secuencia de entrada de caracteres.

Puedes usar fgets para leer toda la línea:

 fgets(comment, sizeof comment, stdin); 

Tenga en cuenta que fgets también lee el carácter de nueva línea. Es posible que desee deshacerse del carácter de nueva línea del comment .

en lugar de scanf usa fgets en stdin para leer toda la línea.

Puede usar las funciones getline() , getline() para leer cadena desde stdin .