Probleme avec les pointeur

Fermé
olyjol - Modifié le 6 mai 2020 à 15:58
 olyjol - 10 mai 2020 à 17:08
Bonjour
j'ai eu un probleme avec les pointeur j'ai utilise un variable du programme principale dans une fonction daonc j'ai utiliser un pointeur mais j'ete obliger d'utilser une sous fonction (fonction dansune fonction mais j'ai eu des probleme a utiliser les varviavle pour les deux fonction exemple:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{    char nom1[20];
    char pays1[20];
    int poin1;
}ecurie;
typedef struct
{   char nom[20];
    char prenom[20];
    char pays[20];
    ecurie vol;
    int point;
}pilote;
typedef struct
{   char nomc[20];
    int nombre;
    char date[20];
    int classement[20];
}grand_prix;

int recherche(int nbr,ecurie *m,int *tnb,ecurie *te)
{int i=0;
    while(strcmp(te [i]->nom1,m->nom1)!=0)
        i=i+1;
        if (i>nbr)
            return(-1);
        else
        {if (tnb[i]<2)
            return(i);
            else
            return(0);}}
void ajoutepilote(int n,pilote *b,int *j,ecurie *e,int *np,int nbr,int *tnb,int *te,pilote *tp)
{ecurie m;
pilote w;
    if (*np>20)
printf("pas d'espace");
else
{printf("a quellle ecurie appartient le pilote ");
scanf(m.nom1);
if (recherche (nbr,m,tnb,te)==0)
    printf("le nombre max de pilotepour cette ecurie a ete deppaser");
else if (recherche(nbr,&m,tnb,te)==-1)
printf("l'ecurie n'exicte pas");
else
   ajoutepilo(&j,&w,&m,tp,&np,tnb,&nbr,te);}



Configuration: Windows / Chrome 81.0.4044.129

7 réponses

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
6 mai 2020 à 20:55
Bonjour,
Ton code est plutôt cohérent. Ce que j'ai pu voir en utilisant ces morceaux de code on n'a même pas la fin de la seconde fonction.)
- ligne 30, tu peux te trouver dans cas où i vaut exactement nbr, et donc l'expression tnb[i] serait hors bornes (si le tableau tnb[] à une taille de nbr, ce que j'ai supposé.)
- ligne 42 elle n'est pas conforme à la ligne 44. Là aussi je n'ai pas l'info mais je pense que 2nd paramètre de l'appel de fonction devrait être par adresse.
Avec des bribes de code mal indenté, difficile d'en dire plus.
0
le problème avec mon programme a commence dés le début exactement dans la ligne 25 j'ai essayer avec plusieurs compilateur mais le probleme perciste je ne sais pas ou se trouve le problème
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{ char nom1[20];
char pays1[20];
int poin1;
}ecurie;
typedef struct
{ char nom[20];
char prenom[20];
char pays[20];
ecurie vol;
int point;
}pilote;
typedef struct
{ char nomc[20];
int nombre;
char date[20];
int classement[20];
}grand_prix;

int recherche(int nbr,ecurie *m,int *tnb,ecurie *te)
{int i=0;
while(strcmp(te [i]->nom1,m->nom1)!=0)
i=i+1;
if (i>nbr)
return(-1);
else
{if (tnb[i]<2)
return(i);
else
return(0);}}
int recherche1(ecurie *te,ecurie *m,int *nbr)
{int i=0;
while(te[i].nom1!=m->nom1)
i=i+1;
if (i>*nbr)
return(-1);
else
return(i);}

void ajoutepilo(int *j,pilote *w,ecurie *m, pilote *tp,int *np,int *tnb,int *nbr,ecurie *te)
{
int x;
printf("donner le nom du %d pilote ",j);
scanf("%s",&w->nom);
printf("donner le prenom du %d pilote",j);
scanf("%s",&w->prenom);
printf("donnerle pays du %d pilote ",j);
scanf("%s",&w->pays);
  • w->vol.nom1=*m->nom1;
  • w->vol.pays1=*m->pays1;

w->vol.poin1=m->poin1;
w->point=0;
  • np=*np+1;

tp[*np]=*w;

tnb[recherche(&nbr,&m,&tnb,*te)]=tnb[recherche(nbr,m,tnb,te)]+1;
}
void ajoutepilote(int n,pilote *b,int *j,ecurie *e,int *np,int nbr,int *tnb,int *te,pilote *tp)
{ecurie m;
pilote w;
if (*np>20)
printf("pas d'espace");
else
{printf("a quellle ecurie appartient le pilote ");
scanf(m.nom1);
if (recherche (nbr,m,tnb,te)==0)
printf("le nombre max de pilotepour cette ecurie a ete deppaser");
else if (recherche(nbr,&m,tnb,te)==-1)
printf("l'ecurie n'exicte pas");
else
ajoutepilo(&j,&w,&m,tp,&np,tnb,&nbr,te);}
}

void ajouecuri(int n,ecurie *m,pilote *tp,int *to,int *ne,int *np,ecurie *te)
{int i,j,k=1;
if (ne>=10)
printf("nombre d'ecurie maximal a ete atteint");
else
{printf("donner le noms de l'ecurie");
scanf("%s",&te[ne+1]->nom1);
printf("donner le pays de l'ecurie");
scanf("%s",&te[ne+1]->pays1);
te[ne+1]->poin1=0;
for (j=1;j<=2;j++)
ajoutepilo();}}
void supprimepilo(pilote *x)
{while((i<=nbp)&&(tp[i]!=x->nom))
i++;
if (i>nbp)
printf("le pilote n'exicte pas")
else
for(j=i;j<=nbp;j++)
tp[i]=t[i+1];}
void maj()
{for (i=0;i=np;i++)
while((e>10)&&(e<1)
{printf("donner le classement du pilote %s %s",tp[i].nom,tp[i].prenom);
scanf("%d",&e);}
switch (e)
{case 1:
{ tp[i].point=tp[i].point+25;
te[recherche1()].point=te[recherche1()].point+25;}
break;
case 2:
{tp[i].point=tp[i].point+18;
te[recherche1()].point=te[recherche1()].point+18;}
break;
case 3:
{tp[i].point=tp[i].point+15;
te[recherche1()].point=te[recherche1()].point+15;}
break;
case 4:
{tp[i].point=tp[i].point+12;
te[recherche1()].point=te[recherche1()].point+12;}
break;
case 5:
{tp[i].point=tp[i].point+10;
te[recherche1()].point=te[recherche1()].point+10;}
break;
case 6:
{tp[i].point=tp[i].point+8;
te[recherche1()].point=te[recherche1()].point+8;}
break;
case 7
{tp[i].point=tp[i].point+6;
te[recherche1()].point=te[recherche1()].point+6;}
break;
case 8:
{tp[i].point=tp[i].point+4;
te[recherche1()].point=te[recherche1()].point+4;}
break;
case 9:
{tp[i].point=tp[i].point+2;
te[recherche1()].point=te[recherche1()].point+2;}

break;
default:
{tp[i].point=tp[i].point+1;
te[recherche1()].point=te[recherche1()].point+1;}
break;}}
void supprecurie()
{ecurie nol;
printf("donner le nom de l'ecurie a supprimer ");
scanf("%s",&nol.nom1);
if (recherche1()==-1)
printf("l'ecurie n'exicte pas")
else
for(i=(recherche1());i=nbre;i++)
tp[i]=t[i+1];}
void ajoutgp()
{grand_prix gp;
if(nbgp>=6)
printf("le nombre du grand prix maximal est atteint")
else
{printf("donner le nom de circuit");
scanf("%s",&gp.nomc);
printf("donner le nom de circuit");
scanf("%s",&gp.nombre);
printf("donner le nom de circuit");
scanf("%s",&gp.date);}}
void majgp()
{for (i=0;i<=5;i++)
maj()}
void suppgp()
{for (i=0;i<=5;i++)
tp[i]=t[i+1];}
void affgp()
{for (i=0;i=5;i++)
printf("%s",to.nomc);}
void affiche ()
{printf("le classement est")
for (i=0;i=5;i++)
printf("la %d °place \n %s" tp[i].nom);
}
void affiche ()
{printf("le classement est")
for (i=0;i=5;i++)
printf("la %d °place \n %s" tp[i].nom);
}
void affiche ()
{printf("le classement est")
for (i=0;i=5;i++)
printf("la %d °place \n %s" tp[i].nom);
}

void main ()
{grand_prix to[20];
ecurie te[10];
pilote tp[20];
ecurie m;
int to[10],ne,np,i,n,j;
for(i=0;i<n;i++)
to[i]=0;
printf("donner le nombre d'ecurie a ajoutter" );
scanf("%d",&n);
for (j=0;j<n;j++)
ajouecuri(n,&t[j],&tp,&to|j],&ne,j,&np);}
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
7 mai 2020 à 22:43
Bonjour,

Tu sembles avoir oublié comment on doit poster du code.
Je ne peux compter jusqu'à 25, mais je peux lire la toute première ligne de code exécutée (c'est bien après la ligne 25). Dans cette ligne tu parcours une boucle dont le nombre d'itérations
n
est non initialisé pour initialiser un tableau
to[]
. D'où dès la première ligne ton code peut faire n'importe quoi.
0
oui j'ai oublier comment en post un code en c excuse moi
le probleme n'est pas avec le taille n de tableau ila m'a affichier cette message de'erreur
25 35 SansNom1.cpp [Error] request for member 'nom1' in '* m', which is of pointer type 'ecurie*' (maybe you meant to use '->' ?)
dans cette ligne while(strcmp(te [i]->nom1,m->nom1)!=0)
0

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

Posez votre question
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
9 mai 2020 à 15:26
Ah oui, cette ligne ne peut pas compiler. Mais ton compilateur semble indiquer une erreur correspondant à un autre code. Dans la ligne a un moment il faut utiliser la
->
et à un autre il faut utiliser le
.
.
Est-ce que
te[i]
est un pointeur ? Si non, il faut utiliser un
.
.
Est-ce que
m
est un pointeur ? Si oui, il faut utiliser une
->
.
0
oui te est un pointeur puisque j'ai utiliser cet var dans une fonction et j'ete obliger d'utiliser cet pointeur dans une fonction inclus dans la premier fonction donc je ne sais pas es que lorsque je déclare te dans la sous fonction es que j'Ecrire **te ou te ou *te j'ai essaye avec tous les écriture mais ca ne mache pas et pour le -> et le . j'essayer dans cette ligne les deux mais ca ne marche pas
0
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
10 mai 2020 à 12:08
bonjour, je pense que le point de départ, c'est d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{    char nom1[20];
    char pays1[20];
    int poin1;
}ecurie;
typedef struct
{   char nom[20];
    char prenom[20];
    char pays[20];
    ecurie vol;
    int point;
}pilote;
typedef struct
{   char nomc[20];
    int nombre;
    char date[20];
    int classement[20];
}grand_prix;

int recherche(int nbr,ecurie **m,int **tnb,ecurie **te)
{int i=0;
    while(strcmp(te [i]->nom1,*m->nom1)!=0)
        i=i+1;
        if (i>nbr)
            return(-1);
        else
        {if (tnb[i]<2)
            return(i);
            else
            return(0);}}
int recherche1(ecurie *te,ecurie *m,int *nbr)
{int i=0;
    while(te[i].nom1!=m->nom1)
        i=i+1;
        if (i>*nbr)
            return(-1);
        else
            return(i);}

void ajoutepilo(int *j,pilote *w,ecurie *m, pilote *tp,int *np,int *tnb,int *nbr,ecurie *te)
{
    int x;
    printf("donner le nom du %d pilote  ",j);
scanf("%s",&w->nom);
printf("donner le prenom du %d pilote",j);
scanf("%s",&w->prenom);
printf("donnerle pays du %d pilote  ",j);
scanf("%s",&w->pays);
*w->vol.nom1=*m->nom1;
*w->vol.pays1=*m->pays1;
w->vol.poin1=m->poin1;
w->point=0;
*np=*np+1;
tp[*np]=*w;

tnb[recherche(&nbr,&m,&tnb,*te)]=tnb[recherche(nbr,m,tnb,te)]+1;
}
void ajoutepilote(int n,pilote *b,int *j,ecurie *e,int *np,int nbr,int *tnb,int *te,pilote *tp)
{ecurie m;
pilote w;
    if (*np>20)
printf("pas d'espace");
else
{printf("a quellle ecurie appartient le pilote ");
scanf(m.nom1);
if (recherche (nbr,m,tnb,te)==0)
    printf("le nombre max de pilotepour cette ecurie a ete deppaser");
else if (recherche(nbr,&m,tnb,te)==-1)
printf("l'ecurie n'exicte pas");
else
   ajoutepilo(&j,&w,&m,tp,&np,tnb,&nbr,te);}
}

void ajouecuri(int n,ecurie *m,pilote *tp,int *to,int *ne,int *np,ecurie *te)
{int i,j,k=1;
if (ne>=10)
    printf("nombre d'ecurie maximal a ete atteint");
else
{printf("donner le noms de l'ecurie");
scanf("%s",&te[ne+1]->nom1);
printf("donner le pays de l'ecurie");
scanf("%s",&te[ne+1]->pays1);
te[ne+1]->poin1=0;
for (j=1;j<=2;j++)
 ajoutepilo();}}
    void supprimepilo(pilote *x)
     {while((i<=nbp)&&(tp[i]!=x->nom))
            i++;
         if (i>nbp)
             printf("le pilote n'exicte pas")
         else
            for(j=i;j<=nbp;j++)
            tp[i]=t[i+1];}
     void maj()
     {for (i=0;i=np;i++)
       while((e>10)&&(e<1)
     {printf("donner le classement du pilote %s  %s",tp[i].nom,tp[i].prenom);
     scanf("%d",&e);}
switch (e)
{case 1:
      { tp[i].point=tp[i].point+25;
            te[recherche1()].point=te[recherche1()].point+25;}
  break;
case 2:
     {tp[i].point=tp[i].point+18;
                   te[recherche1()].point=te[recherche1()].point+18;}
  break;
case 3:
       {tp[i].point=tp[i].point+15;
    te[recherche1()].point=te[recherche1()].point+15;}
  break;
case 4:
   {tp[i].point=tp[i].point+12;
                   te[recherche1()].point=te[recherche1()].point+12;}
  break;
case 5:
    {tp[i].point=tp[i].point+10;
                 te[recherche1()].point=te[recherche1()].point+10;}
  break;
case 6:
      {tp[i].point=tp[i].point+8;
    te[recherche1()].point=te[recherche1()].point+8;}
      break;
  case 7
      {tp[i].point=tp[i].point+6;
                   te[recherche1()].point=te[recherche1()].point+6;}
  break;
   case 8:
     {tp[i].point=tp[i].point+4;
                 te[recherche1()].point=te[recherche1()].point+4;}
  break;
   case 9:
    {tp[i].point=tp[i].point+2;
                 te[recherche1()].point=te[recherche1()].point+2;}

  break;
default:
       {tp[i].point=tp[i].point+1;
                   te[recherche1()].point=te[recherche1()].point+1;}
  break;}}
     void supprecurie()
     {ecurie nol;
         printf("donner le nom de l'ecurie a supprimer ");
         scanf("%s",&nol.nom1);
         if (recherche1()==-1)
            printf("l'ecurie n'exicte pas")
            else
            for(i=(recherche1());i=nbre;i++)
                     tp[i]=t[i+1];}
     void ajoutgp()
     {grand_prix gp;
if(nbgp>=6)
    printf("le nombre du grand prix maximal est atteint")
    else
{printf("donner le nom de circuit");
scanf("%s",&gp.nomc);
printf("donner le nom de circuit");
scanf("%s",&gp.nombre);
printf("donner le nom de circuit");
scanf("%s",&gp.date);}}
     void majgp()
     {for (i=0;i<=5;i++)
maj()}
     void suppgp()
     {for (i=0;i<=5;i++)
              tp[i]=t[i+1];}
     void affgp()
     {for (i=0;i=5;i++)
   printf("%s",to.nomc);}
   void affiche ()
   {printf("le classement est")
       for (i=0;i=5;i++)
        printf("la %d °place \n %s" tp[i].nom);
   }
   void affiche ()
   {printf("le classement est")
       for (i=0;i=5;i++)
        printf("la %d °place \n %s" tp[i].nom);
   }
   void affiche ()
   {printf("le classement est")
       for (i=0;i=5;i++)
        printf("la %d °place \n %s" tp[i].nom);
   }

void main ()
{grand_prix to[20];
ecurie te[10];
pilote tp[20];
ecurie m;
int  to[10],ne,np,i,n,j;
for(i=0;i<n;i++)
       to[i]=0;
printf("donner le nombre d'ecurie a ajoutter" );
scanf("%d",&n);
for (j=0;j<n;j++)
        ajouecuri(n,&t[j],&tp,&to|j],&ne,j,&np);}



0