Manipuler proprement les chaines en c

Fermé
florent - 4 juin 2004 à 11:34
 marvinrouge - 4 juin 2004 à 12:21
j'ai un probleme pour la manipulation des chaines de caracteres en c

voila mon pobleme:

j'ai declare un type personne :



#define LGMAXNOM 15
#define LGMAXADD 80

typedef struct
{
int num_ref ;
char nom [LGMAXNOM+1];
char prenom [LGMAXNOM+1];
char adresse [LGMAXADD+1];
int num_tel ;
int num_port;
char email [LGMAXADD+1];
//on creera un type specifique au date de naissance plus tard
int date_naissance;
} personne;


Enstuire pour enregistrer un element j'utilise :

personne saisir_fiche()
{


//saisie d'une fiche
personne fiche;
printf("entrez num ref \n");
scanf("%d",&fiche.num_ref);

printf("entrez nom \n");
scanf("%s",&fiche.nom);


printf("entrez prenom \n");
scanf("%s",&fiche.prenom);


printf("entrez adresse \n");
scanf("%s",&fiche.adresse);

printf("entrez num tel \n");
scanf("%d",&fiche.num_tel);

printf("entrez num prot \n");
scanf("%d",&fiche.num_port);

printf("entrez naissance \n");
scanf("%d",&fiche.date_naissance);

printf("entrez mail \n");
scanf("%s",&fiche.email);



return fiche;


}


mais voila des que je fait un scanf apres cette procedure, sa plante.

De plus j'ai des resultats aleatoires si par exemple dans le champ adresse je met un espace ex " 30 rue du chateau "

Si vous avez un autre moyen de saisir des chaines de caracteres proprement ca m'aiderait bien

Merci d'avance :-)

5 réponses

et tu ne fais jamais un fflush(stdin) après chacun de tes scanf??
0
non jamis, il faut faire ce fameu flussh apres qu'on ait saisie une chaine ?
0
Canard007 Messages postés 5929 Date d'inscription mercredi 26 mai 2004 Statut Contributeur Dernière intervention 18 septembre 2009 215
4 juin 2004 à 12:06
pour eviter le fflush qui ne marche pas sous tous les os (ex VMS)
moi je prefere les fonction gets et getc qui sont tout de meme beaucoup plus propres...(enfin c'est avis perso)
0
je croit que je vai aussi abandonner le scanf ("%s") parce uqe le flush resout pas tout, en effet des que le scanf rencontre un separateur ( comme l'espace ) benh il va pas plus loin, autrement dit si je tape l'adresse :30 rue lalala , benh il memorise que le 30...

je veut me renseigner sur gets pour essayer


merci de ton aide :-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scanf("%s",fiche.nom); // Ne mets pas le & deanvt fiche.nom car fiche.nom est déjà une adresse

même relarque pour tous les champs de type char [XXX]
0