Probleme avec gets()

Résolu
diocool Messages postés 371 Statut Membre -  
diocool Messages postés 371 Statut Membre -
Bonjour,
quand je saisis un tableau d'enregistrement, arrivé à un point où je dois saisir une chaîne cette étape est sautée à l'exécution et le programme passe à la saisie suivante.
Merci de bien vouloir m'aider

2 réponses

0x0syscall Messages postés 94 Statut Membre 5
 
tu peux poster ton code ?
0
diocool Messages postés 371 Statut Membre 12
 
C'est long mais je vais poster une partie:

struct produits
{ int nump;
float pu;
char libp[50];
}; struct produits p[nbp];

void creer_prod(int *NBP)
{ char rep; *NBP=0;
do
{ printf("\nNombre de produits saisis: %d",*NBP);
printf("\nNum‚ro produit: ");
scanf("%d",p[*NBP].nump);
printf("\nPrix Unitaire: ");
scanf("%f",p[*NBP].pu);
printf("\nLibell‚: ");
gets(p[*NBP].libp);
*NBP++;
printf("\nAjouter? (Oui:O/Non:N): ");
gets(&rep);
}while(rep!='N' && rep!='n' && rep=='O' || rep=='o');
}
0
diocool Messages postés 371 Statut Membre 12 > diocool Messages postés 371 Statut Membre
 
Bonsoir.
Aidez moi svp.
Je ne comprends pas pourquoi à la saisie, la saisie du libellé est sautée pendant l'exécution.

struct produits
{ int nump;
int pu;
char libp[50];
}; struct produits p[5];

main()
{ int i;
clrscr();
for(i=0;i<5;i++)
{ printf("\nNuméro produit: ");
scanf("%d",p[i].nump);
printf("\nPrix Unitaire: ");
scanf("%d",p[i].pu);
printf("\nLibellé: ");
gets(p[i].libp);
}
getch();
}
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
scanf("%d",&p[i].nump); Tu dois passer l'adresse dans le scanf.
Même remarque pour p[i].pu.
Ensuite, pour libp, cela saute à cause du \n stocké dans le buffer.
Pour cela place avant ton gets, place l'instruction :
while(getchar()!='\n');

Et enfin, il ne faut jamais utiliser gets. A la place, tu peux utiliser :
fgets(p[i].libp,50,stdin);

Cdlt
0
diocool Messages postés 371 Statut Membre 12
 
MERCI BEAUCOUP DE TON AIDE RAPIDE ET PRÉCIEUSE. Ça fait longtemps que j'ai eu ce problème.
Encore une fois merci.
0