Pb structure + pointeur

Résolu
cs_snake57 Messages postés 204 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 1 novembre 2011 - 26 févr. 2007 à 02:10
cs_snake57 Messages postés 204 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 1 novembre 2011 - 26 févr. 2007 à 02:43
Bonjour, j'ai un ptit probleme avec un gets qui veux pas passer et je vois pas pourquoi. J'ai pas trop l'habitude d'utiliser des structures dnc le probleme est peut être très simple pour vous.

Bon voila mon code:

    struct planete
    {
           char *nom;
           int galaxie;
           int systeme;
           int place;
    }planete[9];

            for(i=1;i<nbrPlanete;i++) //allocation mémoire pour le nom des planètes.
            {
                planete[i].nom=(char*)malloc(20*sizeof(char));
            }
           
            for(j=1;j<nbrPlanete+1;j++)
            {
                printf("\n\n Saisissez le nom de votre planete numero %d : ",j);
                gets(planete[j].nom);
               
                printf("\n Saisissez la galaxie de votre planète numero %d : ",j);
                scanf("%d",&planete[j].galaxie);
               
                printf("\n Saisissez le systeme solaire de votre planete numero %d : ",j);
                scanf("%d",&planete[j].systeme);
               
                printf("\n Saisissez la place de votre planète numero %d : ",j);
                scanf("%d",&planete[j].place);
            }

C'est donc le gets qui a un pb. Quand j'execute le code. Le printf audessus du gets s'affiche puis directement le printf du dessous sans que je puisse saisir quoi que ce soit.

5 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 févr. 2007 à 02:39
Essais:

for(j=0;j<nbrPlanete;j++)
{
    fflush(stdin);
    printf("\n\n Saisissez le nom de votre planete numero %d : ",j);
    gets(planete[j].nom);
               
    printf("\n Saisissez la galaxie de votre planète numero %d : ",j);
    scanf("%d",&planete[j].galaxie);
               
    printf("\n Saisissez le systeme solaire de votre planete numero %d : ",j);
    scanf("%d",&planete[j].systeme);
               
    printf("\n Saisissez la place de votre planète numero %d : ",j);
    scanf("%d",&planete[j].place);
}

Aussi, si le membre nom de ta structure n'a jamais plus ou moin de 20 char, tu pourrais le déclarer en tableau directement dans la structure. Ça éviterais des allocations et libérations inutiles.

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 févr. 2007 à 02:20
La première valeur d'un tableau est toujours située à 0 et non à 1 donc:

struct planete
{
     char *nom;
    int galaxie;
    int systeme;
    int place;
}planete[9];

for(i=0;i<nbrPlanete;i++) //allocation mémoire pour le nom des planètes.
    planete[i].nom=(char*)malloc(20*sizeof(char));
           
for(j=0;j<nbrPlanete;j++)
{
    printf("\n\n Saisissez le nom de votre planete numero %d : ",j);
    gets(planete[j].nom);
               
    printf("\n Saisissez la galaxie de votre planète numero %d : ",j);
    scanf("%d",&planete[j].galaxie);
               
    printf("\n Saisissez le systeme solaire de votre planete numero %d : ",j);
    scanf("%d",&planete[j].systeme);
               
    printf("\n Saisissez la place de votre planète numero %d : ",j);
    scanf("%d",&planete[j].place);
}

C++ (@++)<!--
0
cs_snake57 Messages postés 204 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 1 novembre 2011
26 févr. 2007 à 02:23
Oui je sais mais j'ignore cette première valeur dans tout mon programme afin de pouvoir compter "normalement" en commencant par le 1. Le pb ne vient donc pas de la.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
26 févr. 2007 à 02:41
Oups:
for(j=1;j<nbrPlanete;j++)

C++ (@++)<!--
0

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

Posez votre question
cs_snake57 Messages postés 204 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 1 novembre 2011
26 févr. 2007 à 02:43
Oui merci beaucoup en ajoutant le fflush (que je ne connaisssais pas) sa fonctionne.
0
Rejoignez-nous