Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2158 connectés 

  FORUM HardWare.fr
  Programmation
  C

  les tableaux d'enregistrement en c

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

les tableaux d'enregistrement en c

n°2183512
kamouna
Posté le 02-04-2013 à 09:28:00  profilanswer
 

 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);
 }
}

mood
Publicité
Posté le 02-04-2013 à 09:28:00  profilanswer
 

n°2183513
crom29
Posté le 02-04-2013 à 09:48:39  profilanswer
 

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
n°2183516
kamouna
Posté le 02-04-2013 à 09:59:49  profilanswer
 

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);

n°2183530
gilou
Modérateur
Modzilla
Posté le 02-04-2013 à 11:36:13  profilanswer
 

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é!  --
n°2183533
kamouna
Posté le 02-04-2013 à 12:04:47  profilanswer
 

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

n°2183539
breizhbugs
Posté le 02-04-2013 à 12:30:22  profilanswer
 

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...
n°2183638
gilou
Modérateur
Modzilla
Posté le 02-04-2013 à 16:30:18  profilanswer
 

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é!  --
n°2183669
kamouna
Posté le 02-04-2013 à 18:09:13  profilanswer
 

je vous remercie :)

n°2186721
habibi4
Posté le 20-04-2013 à 06:29:22  profilanswer
 

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

n°2187877
kamouna
Posté le 28-04-2013 à 17:26:02  profilanswer
 

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 :)

mood
Publicité
Posté le 28-04-2013 à 17:26:02  profilanswer
 

n°2187883
Farian
Posté le 28-04-2013 à 18:51:38  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  les tableaux d'enregistrement en c

 

Sujets relatifs
Identifier les mots dans les tableauxProblèmes tableaux
Extraire des donnees de deux tableauxErreur de bibliothèque lors de l'enregistrement des modifications
Enregistrement en PDF sur réseauCSS et tableaux multiples
Framework pour graphiques et tableaux ?RechercheV pour compter le nombre de résultat issus de 2 tableaux
Déclenchement automatique de programme par enregistrement de fichierEnregistrement dans tableaux
Plus de sujets relatifs à : les tableaux d'enregistrement en c


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR