[C]gets

Fermé
sùsù - 1 juil. 2010 à 22:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 juil. 2010 à 09:16
Bonsoir à tous ,

j'ai un petit problème , on m'a passé ce bout de code , quand je compile sur Codeblocks gets() ne marche pas ,je veux dire que pour la saisie de l'adresse passe directement a la saisie contact.. alors que celui qui m'a passé ce code compile sous VC++ et ça marche pour lui .

tab_client est un tableau d'une structure , le tableau arr est bien déclaré dans la structure .

void ajouter_clients()
{

printf("\n***** Ajout du client ***** \n \n");
tab_client[nb_client].id_client=nb_client+1;
printf("Le nom : ");
scanf("%s",&tab_client[nb_client].nom);

printf("Le prenom : ");
scanf("%s",&tab_client[nb_client].prenom);

printf("Saisir adresse: ");
flushall();
gets(tab_client[nb_client].adr);

printf("Contact : ");
scanf("%s",&tab_client[nb_client].contact);

printf(" ---- Fin de la saisie --- \n");
nb_client++;

}

Merci .

2 réponses

chiti_ Messages postés 1046 Date d'inscription jeudi 16 août 2007 Statut Membre Dernière intervention 23 novembre 2014 128
2 juil. 2010 à 01:49
flushall(); qu'est ce qu'elle fait, oubien, tu peux nous donner son code source??
et puis, essaye de remplacer gets par scanf, histoire de voir ce qui se passera
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
2 juil. 2010 à 09:16
Bonjour,

La fonction flushall() n'est pas standard. Utilise plutôt la fonction flush(stdout) pour vider le flux de sortie.

Ensuite, la fonction gets doit être oubliée. C'est une fonction très dangereuse puisqu'elle ne permet pas de spécifier une taille. D'ailleurs les scanf tels qu'utilisés sont également dangereux. Je te conseille plutôt d'utiliser : fgets.

Sinon, pour la correction de ton programme (sans tenir compte de mes remarques) :
printf("Saisir adresse: "); 
flush(stdout); /*au lieu de flushall(); */
scanf("%s",tab_client[nb_client].adr);/*au lieu de gets(tab_client[nb_client].adr); */


Comme tu le remarqueras, je n'ai pas mis d'esperluette (&) devant le tableau/pointeur.
Aussi, il faut enlever toutes les esperluettes comme dans :
scanf("%s",tab_client[nb_client].nom /*au lieu de scanf("%s",&tab_client[nb_client].nom); */

Je te laisse faire les autres.

Et enfin, j'espère que les tableaux/pointeurs de ta structure tab_client sont bien initialisées.

Cdlt,
0