les tableaux d'enregistrement en c

les tableaux d'enregistrement en c - C - Programmation

Marsh Posté le 02-04-2013 à 09:28:00    

 bonjour,
je suis débutante en programmation c ils m'ont demandé de réaliser un mini projet   alors voilà le code source d'une procedure je sais pas pourquoi ça n'éxécute pas ?   :sweat: mercii d'avance :)  
 
void saisir_personne (personne * tab_personne[],int nbper)
{int i;
 
 for (i=0;i<nbper;i++)  
 {
  do
 {
 printf ("entrez le cin" );
 scanf("%d",&*tab_personne[i].cin);
 }
 while (((tab_personne[i].cin )<0)||((tab_personne[i].cin )<999999999));
 
 
  do
 {
 printf ("entrez le prenom numéro %d",i+1);
 scanf("%s",*tab_personne[i].prenom);
 }
 while ( strlen(tab_personne[i].prenom)<1);
  do
 {
 printf ("entrez le nom numéro %d",i+1);
 scanf("%s",*tab_personne[i].nom);
 }
 while ( strlen(tab_personne[i].nom)<1);
 }
}

Reply

Marsh Posté le 02-04-2013 à 09:28:00   

Reply

Marsh Posté le 02-04-2013 à 09:48:39    

parce que tu n'as pas de fonction main?
 
essaye de rajouter  

Code :
  1. int main()
  2. {
  3.    personne pers[5];
  4.    saisir_personne(pers, 5);
  5.    return 0;
  6. }


 
Pense aussi à déclarer la structure personne, sinon ça compilera pas


---------------
Mods: HAF922 | Shinobi XL White    GitHub     Admin de La Colère d'Aurile, serveur RP-Action Neverwinter Nights 2
Reply

Marsh Posté le 02-04-2013 à 09:59:49    

merci pour votre attention  bien sure j'ai déja déclaré la structure personne et j'ai essaié votre solution mais ça compile pas :( il s'arrete la scanf("%d",&*tab_personne[i].cin);

Reply

Marsh Posté le 02-04-2013 à 11:36:13    

tab_personne est bien un tableau de pointeurs sur des personnes? parce que c'est ce que vous déclarez avec personne * tab_personne[]
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-04-2013 à 12:04:47    

tab_personne[] est tableau d'enregistrement  
voilà le code source
typedef struct {
  int cin;
  char prenom[30];
  char nom[30];
   
   
 } personne;

Reply

Marsh Posté le 02-04-2013 à 12:30:22    

Bonjour,
Passer un pointeur sur le tableau me semble suspect.... Fait voir comment tu appelles ta fonction....
sinon:

Code :
  1. void saisir_personne (personne tab_personne[],int nbper)
  2. {
  3.      int i;
  4.      for (i=0;i<nbper;i++) 
  5.      {
  6.             do
  7.             {
  8.                    printf ("entrez le cin" );
  9.                    scanf("%d",&tab_personne[i].cin);
  10.             } while (((tab_personne[i].cin )<0)||((tab_personne[i].cin )>999999999)); // ta condition était fausse ici!
  11.             do
  12.             {
  13.                    printf ("entrez le prenom numéro %d",i+1);
  14.                    scanf("%s",tab_personne[i].prenom);
  15.             } while ( strlen(tab_personne[i].prenom)<1);
  16.             do
  17.             {
  18.                    printf ("entrez le nom numéro %d",i+1);
  19.                    scanf("%s",tab_personne[i].nom);
  20.             } while ( strlen(tab_personne[i].nom)<1);
  21.      }
  22. }


---------------
Seul Google le sait...
Reply

Marsh Posté le 02-04-2013 à 16:30:18    

Citation :

tab_personne[] est tableau d'enregistrement  

La déclaration du paramètre était donc fausse.
Il fallait faire
void saisir_personne(personne tab_personne[], int nbper)
ou bien la déclaration équivalente, mais moins explicite
void saisir_personne (personne *tab_personne, int nbper)
 
Note en passant: déclarer  
personne *tab_personne[]
c'est déclarer la même chose que personne *(tab_personne[]), c'est a dire que tab_personne est un tableau de (personne *), ie de pointeurs sur personne
A ne pas confondre avec  
personne (*tab_personne)[] qui déclare que tab_personne est un pointeur sur (personne []), ie sur un tableau de personne
L'interprétation de personne *tab_personne[] en personne *(tab_personne[]) vient des règles de précédence du C, ou [] l'emporte.
Ce sont aussi les règles de précédence du C qui permettent d'interpréter scanf("%d",&tab_personne[i].cin); comme scanf("%d",&(tab_personne[i].cin)); par exemple.
http://www.difranco.net/compsci/C_ [...] _Table.htm
 
A+,
 
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-04-2013 à 18:09:13    

je vous remercie :)

Reply

Marsh Posté le 20-04-2013 à 06:29:22    

svp comment fait la recherche dans cette tableau pour chercher si un cin se trouve ou non

Reply

Marsh Posté le 28-04-2013 à 17:26:02    

bonjour  
je veux ajouter des fonctions à mon programme mais ça ne marche pas pourtant y a pas des erreurs de compilation , voila le code source
 
int test (personne  tab_personne[],int cin)
{
    int i,j;
    for (j=1;j<i;j++)
    {
        if ( tab_personne[i].cin==tab_personne[j].cin)
        return (0);
        else return (1);
    }
}
// en fait c'est une fonction qui permet de tester si un cin existe déja
merci d'avance :)

Reply

Marsh Posté le 28-04-2013 à 17:26:02   

Reply

Marsh Posté le 28-04-2013 à 18:51:38    

Bonjour !
 
Vous ne testez que la première valeur du tableau, si cela ne correspond pas, vous retournez 0 sans tester les suivantes. Du coup, la fonction ne renvoie pas souvent le bon résultat.
 
Vous devez rester dans la boucle tant que vous n'avez pas trouvé l'identifiant recherché, et ne renvoyer 0 qu'après avoir testé toutes les valeurs.
 
Bonne continuation !
 
Edit : J'ai lu vraiment trop vite le code et n'ai pas remarqué qu'il est vraiment douteux (pour être gentil) : vous déclarez i sans l'initialiser et l'utilisez aussitôt comme indice de tableau, mais vous n'utilisez pas du tout le "cin" passé en paramètre ... J'espère qu'il s'agit d'un copier/coller raté !


Message édité par Farian le 28-04-2013 à 18:55:47
Reply

Sujets relatifs:

Leave a Replay

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