Scan f avant printf

Fermé
kamikaz-88 Messages postés 61 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 27 décembre 2020 - 27 déc. 2020 à 22:26
yg_be Messages postés 23476 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 février 2025 - 28 déc. 2020 à 12:41
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
28 déc. 2020 à 09:58
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 23476 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 février 2025 Ambassadeur 1 568
28 déc. 2020 à 12:41
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