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

Bibliothèques, systèmes et outils C Discussion :

appel d'une structure dans une fonction


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut appel d'une structure dans une fonction
    Bonjour à tous,

    Je sollicite votre aide par rapport à l'appel d'une structure dans une fonction car je suis assez nouveau avec ces notions de struct et listes chainées. J'ai créé une fonction switch qui en fonction du numero saisi par l'utilisateur renvoie ma structure avec des données précises. Mon problème est de ne pas comprendre comment appeler ma structure en paramètre de ma fonction. J'ai fais pas mal de recherches, mais ça n'a pas fonctionné dans mon cas j'ignore pourquoi..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        //structures
        typedef struct Avion var;//Structure de l'avion
        struct Avion 
    	{
    		char identifiant[20];
    		int carburant;
    		char companie[20];
            struct avion *suivant;
    	};
    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
     
    int main()
    {
        int numero;
        struct Avion *var;
        var = (struct Avion*)malloc(sizeof(struct Avion));
     
        printf("Veuillez saisir un num : \n");
        scanf("%d", &numero);
     
        caract_avion(numero, &var);
     
        printf("%s\n", var.identifiant);
        printf("%d\n", var.carburant);
        printf("%s\n", var.companie);
     
        return 0; 
    }
    Je serais vraiment reconnaissant si vous pourriez m'aider à comprendre ce qui ne va pas dans mon code, merci d'avance !

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    Bonjour,

    Tu dois savoir que tout est passé par valeur à une fonction, et donc pour lui demander de modifier une instance il faut transmettre son adresse.
    Dans main(), tu en fais un peu trop car tu passes l'adresse de l'adresse d'un Avion!
    Dans caract_avion(), tu n'en fais pas assez car tu t'attends à recevoir un Avion!
    Il faut l'adresse d'un Avion.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Dans main(), tu en fais un peu trop car tu passes l'adresse de l'adresse d'un Avion!
    Dans caract_avion(), tu n'en fais pas assez car tu t'attends à recevoir un Avion!
    Il faut l'adresse d'un Avion.
    Donc si j'ai bien compris, je retire le pointeur que j'ai mis sur la variable var? Comme ça j'aurais bien une adresse de l'Avion après.
    Un peu comme ça :
    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
     
    int main()
    {
        int numero;
        struct Avion var;
        var = (struct Avion)malloc(sizeof(struct Avion));   
     
        printf("Veuillez saisir un num : \n");
        scanf("%d", &numero);
     
        caract_avion(numero, &var);
     
        printf("%s\n", var.identifiant);
        printf("%d\n", var.carburant);
        printf("%s\n", var.companie);
     
        return 0; 
    }
    Si mes modifications sont correctes, il me reste toujours le problème de compilation avec "avion.c:173:46: error: conversion to non-scalar type requested
    173 | var = (struct Avion)malloc(sizeof(struct Avion)); ".

    En tout cas merci je pense avoir compris mes erreurs de pointer sur l'adresse d'une adresse

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    Ta ligne 6 n'a aucun sens.
    Pour résoudre : tout simplement supprime cette ligne fantasmagorique.

    Il reste à réécrire la fonction caract_avion.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2021
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Oui c'est vrai que la ligne 6 n'a pas de sens vu que ce n'est plus un pointeur...
    J'ai changé ma fonction carac_avion, et quand je compile je trouve bien les variables définis dans cette fonction, merci beaucoup !!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/11/2005, 20h43
  2. Réponses: 3
    Dernier message: 06/11/2005, 18h02
  3. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37
  4. Réponses: 4
    Dernier message: 26/01/2005, 13h08
  5. Réponses: 4
    Dernier message: 02/06/2004, 16h35

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