Scanf et chaine de caracteres avec espaces [Résolu/Fermé]

Signaler
Messages postés
426
Date d'inscription
dimanche 31 juillet 2011
Statut
Membre
Dernière intervention
17 février 2015
-
Messages postés
16064
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 octobre 2020
-
Bonjour,

j'ai un problème lorsque j'utilise scanf pour lire une chaine de caractères contenant des espaces. avec l'utilisation de fgets ça marche, sauf que Linux renvoit un message me signalant que cette fonction est dangeureuse. j'opte alors pour le scanf.
voici mon code
#include <stdio.h>
#include <stdlib.h>

int main(){
    char *nom;
    nom=(char*)malloc(sizeof(char)*50);
    printf("Entrez votre nom et prenom : ");
    scanf("%s",nom);
    printf(" Votre nom est = %s",nom);
    return 0;
}


l'affichage s'arrête juste aprés l'espace. le prenom ne s'affiche pas.

merci d'avance pour votre aide.


2 réponses

Messages postés
16064
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 697
Tu peux utiliser scanf comme ceci

#include "stdio.h"

int main()
{
	char nom[50];
	
	printf("Entrez votre nom et prenom : ");
	scanf("%[^\n]",nom);
	printf("Votre nom est : %s",nom);
	
	return 0;
}
5
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci


Tu pourrais aussi lui indiquer comment vider le buffer d'entrée, là s'il fait plusieurs scanf de suite il risque fort d'être surpris !
Messages postés
16064
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 697
C'est vrai il faudrait rajouter un getchar() après le scanf pour retirer le \n final.
Mais quitte à pointer l'erreur, ta contribution aurait été bien plus intéressante, si tu l'avais toi même résolu plutôt que d'attendre que je le fasse...
Messages postés
426
Date d'inscription
dimanche 31 juillet 2011
Statut
Membre
Dernière intervention
17 février 2015
21
merci pour votre solution et ça marche.
mais pas une solution qui utiliserait les pointeurs du genre char*?
je voudrai faire de l'allocation dynamique.

vos solutions seront les bienvenues
Messages postés
16064
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 octobre 2020
2 697
Tu peux reprendre ton code d'allocation dynamique d'avant, ça ne change rien.
Il n'y a que le scanf qui est différent.