Pb avec gets()

redbob
Messages postés
9
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
16 juin 2004
- 16 juin 2004 à 20:43
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
- 16 juin 2004 à 21:58
J'ai un probleme avec la fonction gets().
Voici mon code:

struct piece temp;
printf("\nReference de la piece : ");
get(temp.ref);
fflush(stdin);
strupr(temp.ref);
printf("\nLibelle : ");
gets(temp.libel);

fflush(stdin);
printf("%s\t%s",temp.ref,temp.libel);
getch();

et ma structure piece:
struct piece
{
char ref[5];
char libel[30];
float pxVente;
int qteStock;
};

Alors le probleme c'est que ma var temp.ref reçoit les 2 gets()
Je sais pas comment faire, alors si quelqu'un pouvait m'aider ce serait vraiment sympa!

Redbob

8 réponses

cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
16 juin 2004 à 20:52
Je ne comprends pas ton pb, ta var recoit les 2 gets ? ca veut dire koi ?

Au fait, le fflush(stdin); , tu le fais une fois en entrant ds ta fonction, ca suffit...

++

Alhexman
0
redbob
Messages postés
9
Date d'inscription
jeudi 17 avril 2003
Statut
Membre
Dernière intervention
16 juin 2004

16 juin 2004 à 21:00
Merci d'avoir répondu aussi vite.
En fait ce que j'ai voulu dire, c'est que ma variable temp.ref, au lieu de s'arreter a cinq caractères, reçoit en plus le libellé qui est saisi juste après

Redbob
0
cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
16 juin 2004 à 21:13
gets(temp.ref);
temp.ref[4] = 0;

l'element ref de ta structure, declaré come il l'est, ne permet de stocker ke 4caracteres et le caractere de fin de chaine ('\0' == 0) donc verifie ke tu ne recois pas plus ke 4 caracteres, ds le cas contraire, nésite pas a augmenter la taille de ton tab...mais pense qu'un élément de ton tableau sera tjrs "perdu" du a la presence du caractere de fin de chaine !

Voila ++

Alhexman
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
16 juin 2004 à 21:13
fflush(stdin); n'a pas de comportement standard, ca marche sur les compilo de ms (il parait) mais qu'elle est l'interet vu que le code n'est plus standard ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
16 juin 2004 à 21:18
fflush(stdin); permet de vider le tampon d'entrée standar donc pkoi pas lutiliser pour etre sur de ne pas recup de la .... ?
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
16 juin 2004 à 21:24
non, fflush(stdin) ne fait rien, c'est ecris dans le standard ! à si, ca peut meme planter sur certains systemes !

c'est ecris dans le k&r...
0
cs_AlexMAN
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
16 juin 2004 à 21:37
excuz moi de douter du standard, mais j'ai fait un prog sous TC (donc Borland) et si j'enleve les appels a cette fonction, ben il marche plus, donc au fond, cette fonction agit ...
Et le k&r n'est pas la norme ANSI, c'est mm assez != sur certains points
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
16 juin 2004 à 21:58
le k&r est la norme ansi, l'edition 89 à été ecrite pour le standard ansi

fflush sur inputstream peut avoir un effet sur certain compilo, c'est tout

apres tu peux tres bien t'en passer, surtout si tu ve etre portable
0