Une autre possibilité est d'adapter le format pour un format qui lit tout (format %[]) s'arrête sur le '\n' (à cause du ^\n), puis qui lit (%c) et ignore le '\n' (à cause de *) :
scanf("%[^\n]%*c", movie.titre_film);
On peut raffiner en limitant le nombre de caractères lus selon la taille du buffer :
scanf("%49[^\n]%*c", movie.titre_film);
Cette forme ayant l'avantage d'empêcher un dépassement du buffer mais l'inconvénient si on entre plus de 49 caractères sur la ligne de laisser dans le buffer du clavier la fin de la ligne. Pour contrer cet inconvénient, il suffit de lire la fin de la ligne jusqu'au '\n' en l'ignorant (à cause de *) et de terminer en lisant et ignorant ce '\n'. Le buffer du périphérique est alors vide et prêt pour l'entrée suivante.
scanf("%49[^\n]%*[^\n]%*c", movie.titre_film);
Partager