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

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 91
    Points
    91
    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
    Points : 6 498
    Points
    6 498
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    -main retourne int
    -fflush(stdout)
    -c'est pas plutôt &(data->...) dans les scanf?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    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 expérimenté
    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
    Points : 1 421
    Points
    1 421
    Par défaut
    c'est peut etre ça : http://emmanuel-delahaye.developpez.com/tad.htm : que tu essaye de faire?
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 91
    Points
    91
    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 régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 91
    Points
    91
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    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 !

  9. #9
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par M.a.n.u.
    !?! ca veux dire ?? desolé je ne comprend pas
    Bin si dans ton cas, l'implémentation de ta fonction commence avec cette entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ajout_data(struct gamme_audi *data)
    utilise la même forme pour la déclaration que tu as fait en debut de fichier:
    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 !

  10. #10
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    - 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,...) !!!!!
    -Pour main c'est int, c'est la norme et c'est tout.
    -fflush(stdin) n'a pas de sens et est seulement implémenté par certain compilos mais n'est pas standard; fflush(stdout) l'est.
    -pour le dernier point j'ai un doute.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  11. #11
    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 : 46
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par M.a.n.u.
    - 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...
    Non, les structures sont des pointeurs si tu les déclares comme telles !
    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 !

  12. #12
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    Par défaut
    Plus de doute pour le dernier point.
    C'est bien ce que j'ai écrit:
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    j'ai effectué les changement mais a l'exécution il me marque erreur !!!! car il n'ouvre pas le fichier ! je c pas d'où viens le fait qu'il n'ouvre pas le fichier ...

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    void ajout_data(struct gamme_audi*);
    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
    };
    void main()
    {
       struct gamme_audi *data;
     ajout_data(&data);
       getch();
    }
    void ajout_data(struct gamme_audi *data)
    {
     int sw;
       char rep;
     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);  //ou bien &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 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');
        }
     }
    }

    mais je ne veux pas d'une structure globale alors que puis je faire ... sinon tampis vous m'aurez assez aidé !!!!!

  14. #14
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    pour info, dan ston cas, tu est oblige d'avoir une structure globale.

    ensuite, pour ton fichier qui ne s'ouvre pas, essaye de mettre l'adresse absolue (C:\xxx) plutot que l'adresse relative comme tu le fais mais fais aussi attention car la, tu n'est qu'en lecture seule sur ton fichier!!!

    pour etre en lecture-ecriture d'ajout, tu dois avoir en mode r+b. mais tu as meme encore mieux : a+b : ajoute directement a la fin du fichier, ce qui n'est pas le cas du r+b. (sachant que le b implique juste que ton fichier est enregistrer en binaire et non en ASCII).

    voila, j'espere que tu t'en sortira avec ca...
    développeur en folie cherche à ... développer encore plus

  15. #15
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    A propos de fflush() lis ce topic afin d'utiliser la fonction clean() : http://www.developpez.net/forums/sho...d.php?t=134494
    By FlocKs

  16. #16
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    G cerné ce que tu voulais me dire mais je ne trouve pas la fonction "clean" dans mon borland car je travaille sous "borland c++ 5.02" et "Turbo C" (moins récent). sinon il y a un tutoriel pour faire de la gestion d'écran en C pur ????? sinon les amis vous m'avez très bien aidé et je vous en remercie car c des gars comme vous qui font vivre un site comme celui ci pour aider des ptits newbie comme moi lol.... merci encore mais rep pour la solution a "clean()".

  17. #17
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    pense a ...
    développeur en folie cherche à ... développer encore plus

  18. #18
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Août 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2003
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    http://www.developpez.net/forums/sho...d.php?t=134494
    Il fallait lire en entier
    Regarde ce topic, Emdel écrit la fonction clean.
    By FlocKs

  19. #19
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    pour info flocks, ton lien est mauvais...
    développeur en folie cherche à ... développer encore plus

  20. #20
    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 : 37
    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
    Points : 3 958
    Points
    3 958
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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