Utiliser les pointeurs de structures en C?

Fermé
maxstag - Modifié par maxstag le 30/11/2011 à 00:08
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 1 déc. 2011 à 17:27
Bonjour,

Je suis grand débutant en C et ai beaucoup de difficultés à programmer pour mes cours. Ceci est surtout du au fait que je suis obligé de coder chez moi sur codeblocks tandis qu'à l'école on nous demande de coder sur VMS (LSE). Ceci pose bien évidemment des problèmes de compatibilité .

Je ne sais donc pas comment utiliser une structure définie en main dans une autre fonction (ici nommée "ajouter"). Voici mon code faux:

Dans le main:
//Création de la structure 
    typedef struct tabEleve eleve; 
    struct tabEleve 
    { 
        char nom[100]; 
        char prenom[100]; 
        char classe[10]; 
        float note; 
    }; 

eleve tabEleve[100] //Tableau d'élèves de 100 éléments maximum


puis:
void ajouter(char *tableau_commandes, *tabEleve) 
{ 
    int j=0; //pour faire varier le numéro de l'élève de 0 à 99

    if(j<=99) 
    { 
                tabEleve[j].prenom = tableau_commandes[1]; 
         tabEleve[j].nom = tableau_commandes[2]; 
         tabEleve[j].classe = tableau_commandes[3]; 
  tabEleve[j].note = tableau_commandes[4]; 

  if(tableau_commandes[4]==NULL) // pas de note rentrée 
  { 
   tabEleve[j].note = -1; 
  } 

  if(tableau_commandes[4]>20) //note supérieure à 20 
  { 
   printf("Note supérieure à 20, veuillez rentrer une note inférieure à 20"); 
   scanf("%f",tabEleve[j].note); 
  } 

  printf("Nouvel eleve ajoute: %s %s %s 2.1%f/20",tabEleve[j].prenom, tabEleve[j].nom, tabEleve[j].classe, tabEleve[j].note); 
  j=j+1; 
    } 
    else 
    { 
        printf("Nombre d'eleves maximum atteint"); 
    } 

}


avec tableau_commandes une chaine de caractères définie auparavant et découpée en mot (mais ce n'est pas le problème).

puis dans une autre fonction je lance la fonction ajouter comme ceci:

ajouter(*tableau_commandes, *tabEleve);


Quelles sont mes erreurs ?
Merci =)
A voir également:

3 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 30/11/2011 à 00:26
premièrement, il faut déclarer ta structure hors de main() bien sûr.


ensuite, je vois que tu donne le nom tabEleve à deux choses. d'une part ta structure, d'autre part une variable qui est un tableau de cette structure. Je ne suis pas sûr que cela soit interdit, mais personnellement je te déconseille de faire ce genre chose, risque de confusion pour toi.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
30 nov. 2011 à 00:27
d'autre part :

void ajouter(char *tableau_commandes, *tabEleve)

il faut donner un type à "tabEleve" !

eleve * tabEleve
0
Merci beaucoup pour ton aide!
Maintenant en lanceant le debugger j'ai une erreur sur de segmentation qui s'affiche sur un strcmp(), peux tu me dire ce qui ne va pas? (> indique la ligne d'erreur)

void analyse(char *tableau_commandes[NB_LIGNES])
{
    int ajout;
   
    char aj= "ajouter";

    // Est-ce la commande ajouter?
 >ajout=strcmp(*tableau_commandes[0],aj);
    if(ajout==0)
    {
        ajouter(tableau_commandes, tabEleve);

    }
}


Je souhaite juste comparer la valeur dans tableau_commandes[0] avec le mot "ajouter". Comment faire?

Merci encore
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
1 déc. 2011 à 17:27
je ne peux pas comprendre ce code, il ne compile pas.

Je suis pas aussi bete qu'un compilateur, mais pour te faire apprendre je le serai ;)

ici problème de compilation :

char aj= "ajouter";



et ton erreur de segmentation est ici :

ajout=strcmp(*tableau_commandes[0],aj);

car il faut juste donner tableau_commandes[0], qui représente, il me semble, une chaine de caractère dans ton programme.
0