Scan f avant printf

Bonjour,
j'essai d'ecrire une foction qui saisi un tableau de structure
le probleme est apres avoir saisi la taille du tableau
le scanf du premier parametre vient avant le printf ("saisir")
j'ai essayer fflush(stdout) mais ca n'aide pas
est ce que quelq'un peut m'aider
j'utilise gcc sous linux
et voici mon code

#include <stdio.h>
#include<stdlib.h>

struct fleur
{
char design[100];
int cod;
float prix;
float tva;
char couleur[100];
};

struct fleur *tab_fleur(struct fleur *t,int n)

{
int i;

for ( i=0;i<n;i++)
{
printf(" saisir le code\n");
fflush(stdout);

scanf("%d",&t[i].cod);
printf(" saisir designation\n");
scanf("%s",t[i].design);
printf(" saisir le prix\n");
scanf("%f",&t[i].prix);
printf(" saisir le tva\n");
scanf("%f",&t[i].tva);
printf(" saisir le couleur\n");
scanf("%s",t[i].couleur);
}
return t;

}

int main(void)
{struct fleur fl ;
struct fleur *fl2;

int n;
int i;

printf("enter size \n ");
scanf("%d ",&n);

fl2=(struct fleur*)malloc(n*sizeof(struct fleur));
fl2= tab_fleur(&fl,n);

for ( i=0;i<n;i++)
printf(" **fleur (%d) \ndesign=%s\n code=%d\nprix=%f\ntva=%f\ncouleur=%s\n******\n",i,fl2[i].design,fl2[i].cod,fl2[i].prix,fl2[i].tva,fl2[i].couleur);

}


Configuration: Linux / Chrome 87.0.4280.88

2 réponses

  1. Contributeur
    bonjour,
    ton code fait:
    printf("enter size \n ");
    scanf("%d ",&n);
    printf(" saisir le code\n");
    fflush(stdout);
    scanf("%d",&t[i].cod);

    quand tu écris
    le scanf du premier parametre vient avant le printf ("saisir")
    , je suppose que tu veux dire que le scanf de la ligne 5 lit ce que tu as entré au clavier avant l'exécution de la ligne 3.
    cela me semble normal, si le scanf de la ligne 2 n'a pas consommé tous les caractères entrés précédemment.
    qu'as-tu entré précisément?
    1. Bonjour,

      Je ne vois pas de problème particulier avec les
      printf
      et
      scanf
      de ton code. Ça peut dépendre des valeurs saisies.
      Par contre la ligne
      fl2= tab_fleur(&fl,n);
      fait que ton code ne peut gérer qu'une seule
      fleur
      . Tu promets à ta fonction l'adresse de n fleurs et tu lui passes l'adresse d'une unique
      fleur
      . Il faut lui passer le buffer que tu as réservé.
         fl2 = tab_fleur( fl12, n );