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 :

Probleme niveau d'une procedure


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut Probleme niveau d'une procedure
    Bonjour,
    Je debute en C, j'essaille donc quelques petits exos, mais quelques problemes:
    voila, j'attribue 4 parametres à une procedure, et je souhaiterai afficher le resultat du calcul situé dans la fonction.

    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
    #include <stdio.h>
     
    struct panneaux
    {
    	int longueur ;
    	int largeur;
    	int epaisseur;
    	int type;
    };
     
    void affiche (struct panneaux p)
    {
    	printf ("panneau de largeur %d\nde longueur %d\nd epaisseur %d\nde type %d\n",p.largeur, p.longueur, p.epaisseur, p.type);
    }
    int calc (struct panneaux p)
    {
    return p.longueur*p.largeur*p.epaisseur;
    }
    int main ()
    {
     
    	void affiche (struct panneaux);
    	struct panneaux p;
    	printf(" entrer epaisseur, largeur, longueur, et type\n");
    	scanf("%d" "%d" "%d" "%d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    	printf("Le volume = %d", calc(panneaux p))
    affiche(p)
    	system("PAUSE");
    			return 0;
    }
    je pence que le probleme vien de "printf("Le volume = %d", calc(panneaux p))" mais impossible de le resoudre.
    si quelqu'un a une idée, et/ou toute amélioration/conceil à m'apporter je suis preneur.

    ps : je n'ai encore compris que vaguement l'utilité des structures, et dans ce cas present, je pence que j'aurai pu le faire plus simplement sans structure...
    si quelqu'un pouvait aussi m'apporter des precisions la dessu qu'il n'hesite pas

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    tu n'as pas dis quelles erreurs te posent problème (à la compilation, execution...?)
    SInon il semble y avoir un problème déjà lors de l'appel de la fonction affiche (dans le main) car tu lui passe en paramètre un mauvais objet.
    Il faudrait declarer une structure avant, et passer cette derniere en parametre.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    calc(p)
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    L'erreur survient lorsque je genere un débogage (sous visual studio 2005)

    error C2065:'panneaux': identificateur non déclaré
    error C2440:'fonction' : impossible de convertir int en panneaux
    à la ligne "printf("Le volume = %d", calc(panneaux p))"

    ps : j'ai dailleurs homis la ligne "affiche(p); j'ai rectifié cela.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    Avec calc(p) il n'y a plus d'erreur, le programme me demande bien d'entrer les 4 valeurs, mais ne m'affiche pas le resultat.

  6. #6
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Citation Envoyé par theoffss Voir le message
    L'erreur survient lorsque je genere un débogage (sous visual studio 2005)

    error C2065:'panneaux': identificateur non déclaré
    error C2440:'fonction' : impossible de convertir int en panneaux
    à la ligne "printf("Le volume = %d", calc(panneaux p))"

    ps : j'ai dailleurs homis la ligne "affiche(p); j'ai rectifié cela.
    Le passage de la valeur p doit être passer comme ça calc(p);

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main ()
    {
     
    	int calc (struct panneaux);
    	struct panneaux p;
    	printf(" entrer epaisseur, largeur, longueur, et type\n");
    	scanf("%d" "%d" "%d" "%d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    	calc(p);
    affiche(p)
    	system("PAUSE");
    			return 0;
    }
    il n'y a plus d'erreur, mais le resultat n'est pas affiché

  8. #8
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par theoffss Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%d" "%d" "%d" "%d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    c'est plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%d %d %d %d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    Ceci dit, il vaut mieux faire un fgets puis un sscanf

  9. #9
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par theoffss Voir le message
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main ()
    {
     
    	...
    	calc(p);
    ben oui, il fait le calcul mais tu ne le récupères pas !! (et l'affiche encore moins)

  10. #10
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Citation Envoyé par theoffss Voir le message
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main ()
    {
     
        int calc (struct panneaux);
        struct panneaux p;
        printf(" entrer epaisseur, largeur, longueur, et type\n");
        scanf("%d" "%d" "%d" "%d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
        calc(p);
    affiche(p)
        system("PAUSE");
                return 0;
    }
    il n'y a plus d'erreur, mais le resultat n'est pas affiché
    Si tu veut avoir des changement sur la zone memoire de votre structure, il faudera utiliser les pointeurs !!!!

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    oula les pointeurs, je ne me suis pas encore penché dessus.
    je vais voir cela.

    je ne suis plus un truc :
    affiche (p); m'affiche tres bien le printf qui se situe dans cette fonction

    calc(p) ferait le calcule mais n'afficherait m'afficherait pas le resultat du return ?

    En ce qui conserne le fgets je ne connais pas encore.

  12. #12
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    voila un exemple de fonction main :
    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
    int main(void) {
        int resul;
        char ligne[100];
        struct panneaux p;
        printf("entrer epaisseur, largeur, longueur, et type\n");
        fgets(ligne,100,stdin);
        if ( sscanf(ligne,"%d %d %d %d",&p.epaisseur,&p.largeur,&p.longueur,&p.type) != 4 ) {
            printf("erreur\n");
        }
        resul = calc(p);
        affiche(p);
        printf("resul=%d\n",resul);
     
        return 0;
    }

  13. #13
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    Si tu veut avoir des changement sur la zone memoire de votre structure, il faudera utiliser les pointeurs !!!!
    Je ne pense pas qu'il s'agisse de "changements sur la zone mémoire". Le calcul effectué ne semble pas destiné à être stocké dans la structure. Ceci dit, pour les fonctions affiche et calc, et d'une manière générale, il est mieux de donner comme argument un pointeur vers une structure plutôt que la structure elle-même. Mais bon, dans ce cas, elle n'est pas bien grosse...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    merci corentin59 cela marche parfaitement
    ne saisissant pas encore les "fgets(ligne,100,stdin);" j'ai dans un premier temps laissé scanf.
    mon probleme est resolu, néanmoin, je ne voie pas plus l'utilité des procédures.

  15. #15
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par theoffss Voir le message
    ne saisissant pas encore les "fgets(ligne,100,stdin);" je vais mis mettre
    d'une manière générale, quand on fait intervenir l'utilisateur pour rentrer des informations, il faut toujours vérifier. La commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(ligne,100,stdin);
    permet de lire 100 caractères au maximum sur stdin et de les stocker dans "ligne", qu'on a déclaré comme un tableau de 100 caractères. Ainsi, si l'utilisateur tape n'importe quoi, et en particulier plus de 100 caractères, il n'y aura pas de comportement indéterminé.

    Dans la même idée, c'est pour cela que je vérifie le retour de sscanf. En effet, que ce passerait-il si l'utilisateur rentrait 3 chiffres ?

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    Okai, je comprend,

    Avec le if sscan et fgets, j'obtien des resultats extravagants (-888888 pour la longueur alors que j'ai simplement mis 3) et j'ai beau metre 5 6 chifre ou plus ca ne m'affiche pas "erreur"

  17. #17
    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 theoffss Voir le message
    Avec le if sscan et fgets, j'obtien des resultats extravagants (-888888 pour la longueur alors que j'ai simplement mis 3) et j'ai beau metre 5 6 chifre ou plus ca ne m'affiche pas "erreur"
    Montre la dernière version de ton code qui pose problème.

Discussions similaires

  1. Probleme affichage d'une procedure stockée sous WRS
    Par ganjah06 dans le forum Outils BI
    Réponses: 2
    Dernier message: 24/03/2010, 14h42
  2. Probleme pour passer une Procedure
    Par Kahiba dans le forum Delphi
    Réponses: 10
    Dernier message: 04/10/2006, 10h37
  3. Probleme dans une procedure stockée
    Par malbaladejo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/07/2004, 14h08
  4. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04
  5. [C#] Problème de récupération d'une procédure Oracle
    Par minnieBis dans le forum ASP.NET
    Réponses: 11
    Dernier message: 20/04/2004, 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