Scan f avant printf

kamikaz-88 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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