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 :

passé une structure a une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut passé une structure a une fonction
    bonjour, j'ai créer un programme en c qui doit passé une structure et le compilateur ne conné pas les champs de ma structure... sachant que ma structure doit être déclaré dans main().

    voici mon prg:


    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    void ajout_data();
    void main()
    {
    struct gamme_audi
    {
    short CE; //flag d'effacement (1(non effacé) ou 0(effacé))
    char nref[21]; //référence de la designation
    char marque[30]; //soit audi,merco,bmw
    char model[30]; //indiquera la marque (merco, bm,audi)
    float phtva; //prix tva non comprise
    float tva; //le taux applicable au prix
    float ptvac; //prix tva comprise
    }data;
    ajout_data(data);
    getch();
    }
    void ajout_data(struct gamme_audi *data)
    {
    int i;
    int sw;
    FILE *f;
    f=fopen("gamme_audi.dat","rb"); //ouverture en ajout
    if(f==NULL)
    {
    printf("erreur");
    }
    else
    {
    sw=0;
    while(sw==0)
    {
    //je ne presente pas le caractère d'effacement c pas prévu pour ici
    fflush(stdin);
    printf("\n n° de reference : ");
    scanf("%s",data->nref);
    fflush(stdin);
    printf("\n marque du model : ");
    scanf("%s",data->marque);
    fflush(stdin);
    printf("\n model : ");
    scanf("%s",data->model);
    fflush(stdin);
    printf("\n prix hors tva : ");
    scanf("%f",data->phtva);
    fflush(stdin);
    printf("\n taux de tva : ");
    scanf("%f",data->tva);
    fflush(stdin);
    //calcul du prix tvac
    data->ptvac=data->phtva*data->tva;
    printf("\nle prix tvac est calculer automatiquement : %.2f",data->ptvac);
    fwrite(&data,sizeof(data),1,f); //ecriture dans le fichier
    do
    {
    printf("\n\nvoulez vous ajouté un autre enregistrement ? (o/n) : ");
    scanf("%c",&rep);
    if(rep=='o' || rep=='O')
    {
    sw=0;
    }
    else
    {
    if(rep=='n'||rep=='N')
    {
    sw=1;
    }
    }
    }
    while(rep!='O' && rep!='o' && rep!='n' && rep!='N');
    }
    }
    }

    alors d'après vous que dois je faire ou que n'est fait pour que ca marche ???

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Ce que tu dois faire ? d'abord
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    -main retourne int
    -fflush(stdout)
    -c'est pas plutôt &(data->...) dans les scanf?

  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
    Si l'argument de ta fonction est un pointeur sur une structure, passe alors dans ton cas l'adresse de ta structure:

    D'ailleurs, je te conseil de mettre le prototype sous la même forme que l'implémentation de ta fonction !

    PS: Retravaille un peu la présentation de ton code car là, c'est franchement pas agréable du tout et ca le serais tout autant avec les balises code que tu as oublié !
    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 éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    c'est peut etre ça : http://emmanuel-delahaye.developpez.com/tad.htm : que tu essaye de faire?

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut
    retravaillé mon code dans ce sens de remplacé "var->champs" par (*var).champs ?????? sinon eclaire moi et pour le message un peu plus haut -> et le . est équivalent ... merci pour ces precieux conseil !!!!!

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut
    D'ailleurs, je te conseil de mettre le prototype sous la même forme que l'implémentation de ta fonction !
    !?! ca veux dire ?? desolé je ne comprend pas

    main retourne int
    -fflush(stdout)
    -c'est pas plutôt &(data->...) dans les scanf?
    - void est equivalent a int sauf que tu ne dois plus mettre en fin de main "return" pour le cas de main() car il n'est pas nécessaire de retourné qq'chose (pour le cas de main !!!!! et sous unix un simple "main()" peut suffire !!!!
    -c'est fflush(stdin) cela vide le buffer des fonctions bufferisé (scanf,gets,...) !!!!!
    - on utilise le '&' pour connaitre l'adresse d'une var mais les structures je me demande si ce ne sont pas deja des pointeurs sinon oui mettre le '&' et dans le cas des tableaux: sachant que le nom du tableau represent un pointeur pointant vers le premier element peu importe le nombres d'indices...

    si je me trompe corrigé moi svp !!!! sinon j'espère avoir un peu aidé qq'un a part moi lol !!!!!

  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 M.a.n.u.
    retravaillé mon code dans ce sens de remplacé "var->champs" par (*var).champs ?????? sinon eclaire moi et pour le message un peu plus haut -> et le . est équivalent ... merci pour ces precieux conseil !!!!!
    Non je parle bien de l'esthétique, c'est franchement pas plaisant de voir un code aussi moche ... t'inquiet t'est pas le seul à qui j'ai fait la remarque mais là .... ca n'aide pas aux autres qui veullent t'aider et c'est loin d'être agréable à lire


    Je crois que je vais faire ce que j'ai déjà une fois dit .. faire un article sur comment écrire un code correct
    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. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Réponses: 5
    Dernier message: 12/10/2008, 13h41
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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