[Résolu] Exercice C, structure, type, compilation modulaire

Exercice C, structure, type, compilation modulaire [Résolu] - C - Programmation

Marsh Posté le 30-01-2010 à 14:34:56    

Erreur lors de la compilation dans main.c :  
 
"syntax error before data" ligne 13 et 14 du main.c
 
main.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "func.h"
  4. int main()
  5. {
  6.     int nbr_personne = 0;
  7.     data personne[15];
  8.     printf(" * Veuillez saisir le nombre de personne a indexer : " );
  9.     scanf("%d", &nbr_personne);
  10.     data_input(nbr_personne, data personne[]);
  11.     tri_bulle(nbr_personne, data personne[]);
  12. }


 
func.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "func.h"
  4. void data_input(int nbr_personne, data personne[])
  5. {
  6.     int i = 0;
  7.     for (i = 0; i < nbr_personne; i++)
  8.     {
  9.         printf(" * Veuillez saisir votre nom : " );
  10.         scanf("%s\n", personne[i].nom);
  11.         printf(" * Veuillez saisir votre prenom : " );
  12.         scanf("%s\n", personne[i].prenom);
  13.         printf(" * Veuillez saisir votre age : " );
  14.         scanf("%d\n", &personne[i].age);
  15.     }
  16. }
  17. void tri_bulle(int nbr_personne, data personne[])
  18. {
  19.     int i = 0;
  20.     int tmp = 0;
  21.     int tri = 0;
  22.     while (tri == 0)
  23.     {
  24.         tri = 1;
  25.         for (i = 0; i < nbr_personne; i++)
  26.         {
  27.             if (personne[i].age > personne[i+1].age)
  28.             {
  29.                 tmp = personne[i+1].age;
  30.                 personne[i+1].age = personne[i].age;
  31.                 personne[i].age = tmp;
  32.                 tri = 0;
  33.             }
  34.         }
  35.     }
  36. }


 
func.h
 

Code :
  1. #ifndef MAIN_H_INCLUDED
  2. #define MAIN_H_INCLUDED
  3. typedef struct data data;
  4. struct data
  5. {
  6.     char nom[15];
  7.     char prenom[15];
  8.     int age;
  9. }
  10. ;
  11. void data_input(int nbr_personne, data personne[]);
  12. void tri_bulle(int nbr_personne, data personne[]);
  13. #endif // MAIN_H_INCLUDED

Message cité 1 fois
Message édité par Profil supprimé le 31-01-2010 à 01:04:26
Reply

Marsh Posté le 30-01-2010 à 14:34:56   

Reply

Marsh Posté le 30-01-2010 à 15:42:12    

Tu n'as pas de variable "personne" dans le main, uniquement "individu". Pas regardé le reste.

Reply

Marsh Posté le 30-01-2010 à 16:45:54    

J'ai rename en "personne" ça change rien.

Reply

Marsh Posté le 30-01-2010 à 16:57:23    

Code :
  1. typedef struct
  2. {
  3.     char nom[15];
  4.     char prenom[15];
  5.     int age;
  6. } data;
 

ca ira mieux deja

 
Code :
  1. data_input(nbr_personne, personne);

Message cité 1 fois
Message édité par Joel F le 30-01-2010 à 17:30:15
Reply

Marsh Posté le 30-01-2010 à 17:11:14    

Ton passage de paramètres lorsque tu appelles tes fonctions est erroné.
 
Le message d'erreur du compilateur est explicite.

Reply

Marsh Posté le 30-01-2010 à 18:02:37    

Joel F a écrit :

Code :
  1. typedef struct
  2. {
  3.     char nom[15];
  4.     char prenom[15];
  5.     int age;
  6. } data;


 
ca ira mieux deja
 

Code :
  1. data_input(nbr_personne, personne);



 
J'ai essayé avec les modifs que vous m'avez indiqué, ça marche toujours pas.
Mais ce que je comprend pas surtout, c'est qu'il s'agit à la base d'un tableau de personne de type data, si j'envois juste personne sans les crochet devant, ça signifie que j'envois une variable unique. Pareil si j'enlève les crochets je dois le faire pour les fonctions data_input et tri_bulle : dans data_input je parcours le tableau de personne de manière à saisir les infos nom, prenom, age pour personne[0] puis les infos pour personne[1] ect. Si j'envois pas personne[] je pourrai pas faire ce type de saisi. Merci de m'éclairer

Reply

Marsh Posté le 30-01-2010 à 18:56:22    

tu as manifestement pas compris le concept de variable et de type.

 

data personne[4] : tableau de 4 data
personne : c'est el tableau
personne[i] c'ets le ieme element de ton tableau.

 

ta ligne:

 

data_input(nbr_personne, data personne[]);

 

ne veut rien dire car tu passe le type et non la variable personne


Message édité par Joel F le 30-01-2010 à 18:57:03
Reply

Marsh Posté le 30-01-2010 à 23:05:41    


 
Pour faire suite au message de Joel F, tu seras plus à l'aise si tu différencies un peu mieux les noms de variables de noms de types. Par exemple en mettant un "s_" devant les noms de structures et un "t_" devant les noms de types...

Code :
  1. #ifndef MAIN_H_INCLUDED
  2. #define MAIN_H_INCLUDED
  3. struct s_data
  4. {
  5.     char nom[15];
  6.     char prenom[15];
  7.     int age;
  8. };
  9. typedef struct s_data t_data;
  10. void data_input(int nbr_personne, t_data[]);
  11. void tri_bulle(int nbr_personne, t_data[]);


 
main.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "func.h"
  4. int main()
  5. {
  6.     int nbr_personne = 0;
  7.     t_data personne[15];
  8.     printf(" * Veuillez saisir le nombre de personne a indexer : " );
  9.     scanf("%d", &nbr_personne);
  10.     data_input(nbr_personne, personne);
  11.     tri_bulle(nbr_personne, personne);
  12. }


 
func.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "func.h"
  4. void data_input(int nbr_personne, t_data personne[])
  5. {
  6.     ...
  7. }
  8. void tri_bulle(int nbr_personne, t_data personne[])
  9. {
  10.     ...
  11. }


Message édité par Sve@r le 30-01-2010 à 23:09:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 31-01-2010 à 01:03:31    

Excellent merci pour les explications !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed