Probleme avec gets()

Résolu
diocool Messages postés 367 Date d'inscription   Statut Membre Dernière intervention   -  
diocool Messages postés 367 Date d'inscription   Statut Membre Dernière intervention   -
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 85 Date d'inscription   Statut Membre Dernière intervention   5
 
tu peux poster ton code ?
0
diocool Messages postés 367 Date d'inscription   Statut Membre Dernière intervention   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 367 Date d'inscription   Statut Membre Dernière intervention   12 > diocool Messages postés 367 Date d'inscription   Statut Membre Dernière intervention  
 
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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 367 Date d'inscription   Statut Membre Dernière intervention   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