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

  1. 0x0syscall Messages postés 94 Statut Membre 5
     
    tu peux poster ton code ?
    0
    1. 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
      1. 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
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
    1. 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