IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

structure en c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut structure en c
    bonsoir,
    je suis debutant en c et je n'arrive pas a trouver mon erreur qj*uand je compile il me dit type mismatch au niveau de strcpy et strcmp pourtant j'ai declaré la structure. Si quelqu'un peut-il m'aider merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    typedef struct EMP {char *nom;
    		int salaire;
    			}EMP;
     
     
    fonction(struct EMP *a,int n)
    {
         struct EMP E ; struct EMP temp;
      int i,j,p;
     
    for(j=n;j>0;j--)
    {
    for(i=0;i<n;i++)
    {
     p=strcmp( E.nom[i], E.nom[i+1])
      if (p>0){
         strcp(temp,E.nom[i]);
         strcpy( E.nom[i],E.nom[i+1]);
          strcp(E.nom[i+1],temp);
     
    	     }
    }
     
         void main()  {
          int i; int n;
      clrscr();
     for(i=0;i<=5;i++)
     
     {
     
    printf("entrez le nom de l'employer");
    scanf("%s",e.nom[i] );
    printf("entrze le salaire");
    scanf("%d",&e.salaire);
    printf("le nom est %s ",e.nom[i]);
    printf("le salaire est %d  ",e.salaire);
    	   }
      fonction( a, n);
      getch();
      }

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    D'ici, je ne vois pas.

    Par contre, ce code n'est ni fait ni à faire:
    • utilisation de scanf("%s")
    • Aucune allocation du champ "nom" de la structure: C'est un pointeur qui pointe dans le vide!
    • n n'est pas initialisé non plus.
    • main() doit retourner un int. Toujours.

    Et j'ajoute "indentation déplorable" car on n'y comprend rien.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tiens, j'ai essayé de compiler, pour voir:
    • fonction() n'a pas de type de retour.
    • fonction() n'est pas terminée (nombre d'accolades incorrect).
    • utilisation de strcmp() directement sur les char et non les char*
    • utilisation de fonction inconnue strcp()

    Et je passe sur l'usage de clrscr(), qui est une fonction Borland (inconnue au bataillon sous Visual, même avec <conio.h>) et de getch().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    E.nom est de type char* donc E.nom[i] est de type char et aussi bien strcmp que strcpy prennent des (const) char* en argument.
    Le compilateur a donc raison et son diagnostic est correct : type mismatch

    Cela dit c'est loin d'être le seul problème, comme signalé par Médinoc (et y'en a une bonne douzaine d'autres à vue de nez).
    Tu devrais peut-être commencer par quelque chose de beaucoup plus simple, par exemple sans la structure déjà, et enrichir au fur et à mesure en compilant à chaque étape ?

    MAT.

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pipip
    je suis debutant en c et je n'arrive pas a trouver mon erreur qj*uand je compile il me dit type mismatch au niveau de strcpy et strcmp pourtant j'ai declaré la structure. Si quelqu'un peut-il m'aider
    Il manque des }, strcp() n'est pas défini... Merci de d'éviter de poster n'importe quoi, on a pas que ça à faire...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    bonjour,

    ne soyer pas aussi arrogant si vous vous êtes capable d'écrire un programme à yeux fermer moi je suis la pour APPRENDRE les erreurs je ne vais pas les faire toute ma vie

    j'ai corriger mon programme et encore pardon pour les erreurs bêtes que je fais ,le programme run mais il ya un petit probléme . En structure je ne suis pas obliger de permuter aussi les salaires , changer le nom suffit pour changer le salaires .


    temp.nom[i] = x.nom[i] ;
    x.nom[i] = x.nom[i+1];
    x.nom[i+1] = temp.nom[i] ;
    mais moi je suis obliger de faire :


    temp.nom[i] = x.nom[i] ;
    temp.salaire[i]=x.salaire[i];
    x.nom[i] = x.nom[i+1];
    x.salaire[i]=x.salaire[i+1];
    x.nom[i+1] = temp.nom[i] ;
    x.salaire[i+1]=temp.salaire[i];

    sino ça ne marche pas .
    le code source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
     #include<stdio.h>
    #include<conio.h>
    #include<string.h>
     
        typedef struct  EMP
        {
    	char *nom[5];
    	int *salaire;
        } EMP;
     
     function( struct EMP x, int n)
       {
     
        EMP temp;
        int  i,j ,p;
    	 n=3;
        for(i=0;i<n;i++)
        {
    	printf("entrez le nom de l'employe: ");
    	scanf("%s",x.nom[i] );
    	printf("entrze le salaire: ");
    	scanf("%d",&x.salaire[i]);
    	printf("le salaire de %s est %d.\n", x.nom[i], x.salaire[i]);
        }
     
       for(j=n;j>0;j--)
          {
             for(i=0;i<n;i++)
                  {
                     if(strcmp( x.nom[i], x.nom[i+1])>0)
                   {
     
    	        temp.nom[i] = x.nom[i] ;
    	        temp.salaire[i]=x.salaire[i];
    	        x.nom[i] = x.nom[i+1];
    	        x.salaire[i]=x.salaire[i+1];
    	        x.nom[i+1] = temp.nom[i] ;
    	        x.salaire[i+1]=temp.salaire[i];
    	  }
    	   }}
     
         for(i=0;i<n;i++)
               {
    	printf("%s,%d\n", x.nom[i], x.salaire[i]);
                }
                 getch();
                 return 0;
                }
     
     
     
      int main(void)
          {
         EMP x;    
         int i,n;
         clrscr();
         function(  x,  n);
     
       return 0;
        }

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1. Ta structure EMP ne contient pas un tableau de caractères, mais un tableau de cinq pointeurs jamais initialisés. Tu cherches à faire une structure EMP qui gère plusieurs employés ?
    2. Tu passes une copie d'une structrure EMP non-initialisée à ta fonction.
    3. Le pointeur "salaire" de tes structures n'est jamais initialisé.


    Bref, tu n'arrêtes pas de toucher à des pointeurs qui ne pointent sur rien du tout.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    oui je doit faire une structure emp qui gère + employer c'est pou cettre raison que j'ai utilisé le pointeur dans nom .

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Parle français, s'il te plait.

    Pas pratique, cette conception. C'est généralement plus simple à gérer avec une structure qui gère un seul employé, et un tableau de cette structure...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo