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. 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 );
    0
    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?
      0