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 :

fonction, structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut fonction, structure
    salut tout le monde
    s'il vous plait j'ai besoin d'aide a propos des fonction en c
    je voudrais faire entrer un tableaus structuré comme parametre dans la fonction mais ca ne marche pas voila la structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct geo 
    { char ville[15]; 
    char pays[15]; 
    char continent[15]; 
    long nhab; 
    }; 
    struct geo t[200] ;
    et la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void afficher_villes(geo t) 
    {int i; 
    for(i=0;i<nb_v;i++) 
    if((strcmp(t[i].pays,"maroc"))&& (t[i].nhab>100000)) 
    printf("- %s",t[i].ville); 
    }
    merci d'avance pour votre aide.
    k.cheker@hotmail.fr

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    En fait, ce que tu as fait là, c'est de mettre une simple variable du type de ta structure en argument à la fonction mais pour un tableau, il faut que ton argument soit au moins un pointeur (plusieures pratique possible mais je préfère celle là) donc, voici ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_villes(geo * t, size_t size)
    Je t'ai mis un second argument car les tableaux en C ne connaissent pas leur propre taille, il faut donc donner l'info à la fonction qui va traiter ton tableau !

    Ici je vois que tu utilises une variable qui n'est même pas déclarée dans ta fonction, je redoute l'utilisation d'une variable globale ... à surtout éviter ce genre de pratique !

    Donc pour finir, voici une implémentation possible pour ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void afficher_villes (geo * t, size_t size)
    {
       size_t i = 0;
     
       for (i = 0; i < size; i++)
       {
          if ((strcmp (t[i].pays, "maroc")) && (t[i].nhab >100000))
          {
             printf ("- %s", t[i].ville);
          }
       }
    }
    PS: pas testé !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    t[i]->pays plutot nan?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par lun4t1k
    t[i]->pays plutot nan?
    Nan ! L'argument est certes un pointeur mais ce qu'on utilise est un tableau avant tout, tu peux toujours essayer mais en réglant ton compilateur sur au moins les options:
    tu verras bien le message qu'il va te donner:
    /home/franhec/Documents/Programmation/CodesTests/ANSI/App/main.c:14: error: invalid type argument of ‘->’
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Franck.H
    Salut et bienvenue sur les forums de developpez.com


    En fait, ce que tu as fait là, c'est de mettre une simple variable du type de ta structure en argument à la fonction mais pour un tableau, il faut que ton argument soit au moins un pointeur (plusieures pratique possible mais je préfère celle là) donc, voici ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_villes(geo * t, size_t size)
    Je t'ai mis un second argument car les tableaux en C ne connaissent pas leur propre taille, il faut donc donner l'info à la fonction qui va traiter ton tableau !

    Ici je vois que tu utilises une variable qui n'est même pas déclarée dans ta fonction, je redoute l'utilisation d'une variable globale ... à surtout éviter ce genre de pratique !

    Donc pour finir, voici une implémentation possible pour ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void afficher_villes (geo * t, size_t size)
    {
       size_t i = 0;
     
       for (i = 0; i < size; i++)
       {
          if ((strcmp (t[i].pays, "maroc")) && (t[i].nhab >100000))
          {
             printf ("- %s", t[i].ville);
          }
       }
    }
    PS: pas testé !
    salut j'ai remplacer le tableau comme pointeur mais lors de la compilation
    une erreur <improper use of typedef 'geo'>
    merci co meme

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par k.cheker
    salut j'ai remplacer le tableau comme pointeur mais lors de la compilation
    une erreur <improper use of typedef 'geo'>
    merci co meme
    Ta structure, tu en as fait un typedef ou pas ?

    Si oui alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_villes(geo * t, size_t size)
    Si non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_villes(struct geo * t, size_t size)
    Le mieux serait encore que tu montre le code complet de ton programme !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Franck.H
    Ta structure, tu en as fait un typedef ou pas ?

    Si oui alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_villes(geo * t, size_t size)
    Si non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void afficher_villes(struct geo * t, size_t size)
    Le mieux serait encore que tu montre le code complet de ton programme !
    voila le code complet du programme
    mais quel est l'utilite de size_t car le tableau est deja remplie

    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
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>
    struct geo
    {    char ville[15];
         char pays[15];
         char continent[15];
         long nhab;
    };
    struct geo t[200] ;
     
    int creer(int x);
    void afficher_villes(struct geo *t);
     
     
    int nb_v;
     
     
    void main()
    {
    printf("\n\nle nombre total des villes saisies est:   %d",creer(nb_v));
    printf("\n\nliste des villes de maroc ayant un nombtre d habitant >100000 :\n");
    afficher_villes(geo *t);
     
    getch();
    }
     
     
     
    int creer(int x)
    {  int test,i;
       test=1;
       i=x=0;
       while(test==1)
       {printf("\nsaisir la ville :  ");
       scanf("%s",t[i].ville);
       printf("\nsaisir le pays :  ");
       scanf("%s",t[i].pays);
       printf("\nsaisir le continent :  ");
       scanf("%s",t[i].continent);
       printf("\nsaisir le nombre d habitant :  ");
       scanf("%l",t[i].nhab);
       x++;
       printf("\npour saisir une autre ville tapez '1':\n");
       scanf("  %d",&test);
       i++;
       };
       return x;
    }
     
    void afficher_villes(struct geo *t)
    {int i;
      for(i=0;i<nb_v;i++)
        if((strcmp(t[i].pays,"maroc"))&& (t[i].nhab>100000))
        printf("- %s",t[i].ville);
    }
    k.cheker@hotmail.fr

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par k.cheker
    mais quel est l'utilite de size_t car le tableau est deja remplie
    le type size_t est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned long size_t;
    définit dans stddef.h et autres headers également. C'est un type utilisé surtout pour les données relatives à une taille comme les indices des tableaux, les tailles transmises pour les allocations dynamique, etc... Ce n'est pas obligatoire de l'utiliser mais je préfère, question d'habitude !


    Pour ton code je vais voir ca...
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. Création de fonction - Structure d'une trame - vb 2008
    Par hunteshiva dans le forum VB.NET
    Réponses: 7
    Dernier message: 13/04/2010, 14h28
  2. désallocation mémoire - fonction - structure - tableau dynamique
    Par Flaherty Mc Coillean dans le forum Débuter
    Réponses: 2
    Dernier message: 25/11/2009, 17h42
  3. paramètres fonction structures pointeurs
    Par tom31 dans le forum Débuter
    Réponses: 2
    Dernier message: 12/01/2008, 18h22
  4. fonction structure c
    Par k.cheker dans le forum C
    Réponses: 46
    Dernier message: 10/04/2007, 23h16
  5. Fonction, structure, pointeurs et scanf
    Par exhortae dans le forum C
    Réponses: 13
    Dernier message: 27/02/2007, 17h31

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