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 programme structuré.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut probleme programme structuré.
    Bonjour tout le monde

    J'ai un probleme pour la réalisation d'un programme structuré en mode console.

    Voici la structure

    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #ifndef struct_H
    #define struct_H
    #define taux 6.55957
     
    struct type 
    {
     
    int choix;
     
     
    };
     
     
    #endif

    Voici le main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "struct.h"
     
    int main(int argc, char *argv[])
    {   
    preprog();
     
     
     
      return 0;
    }
    Voici le fichier choixConv.c

    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
     
     
    include "struct.h"
    #include <stdlib.h>
    #include <stdio.h>
     
    struct type t;
     
     
     
    void preprog()
    {
     
    Question();    
     
    }
     
    int Question()
    {
     
    float sommeurro;
    float sommefranc;  
     
    printf("Quel conversion voulez vous faire\n");  
    printf("\n"); 
    printf("Entrer 1 pour convertir euro en francs\n");
    printf("Entrer 2 pour convertir francs en euro\n");
    t.choix = getchar();   
     
     
    switch (t.choix){
     
         case '1':
     
                 Euro_F(sommeurro);  
          break;       
     
         case '2':
     
                  Francs_E(sommefranc);
         break;
     
         default: 
     
         printf("Erreur de saisie");
         break;  
           }
     
    return 0;         
    }
    Voici le fichier francs.c

    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
     
    #include "struct.h"
    #include <stdlib.h>
    #include <stdio.h>
     
     
    struct type t;
     
    float Francs_E(float sommeurro)
    {
     
    float sommeconv;
     
    printf("Entrer la somme a convertir\n");      
     
    sommeurro = getchar(); 
     
    printf("Convertion en cours\n");      
     
    sommeconv = sommeurro / taux;  
     
    printf("Voici le resultat de votre conversion %f", sommeconv);   
     
     
     
    }
    Voici le fichier euro.c
    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
     
    #include "struct.h"
    #include <stdlib.h>
    #include <stdio.h>
     
    struct type t;
     
    float Euro_F(float sommefranc)
    {
     
    float sommeconv;      
     
    printf("Entrer la somme a convertir\n");      
     
    sommefranc = getchar(); 
     
    printf("Convertion en cour\n"); 
     
    sommeconv = sommefranc * taux;    
     
     
    printf("Voici le resultat de votre conversion %f", sommeconv);
     
     
     
    }
    Mon probleme est que rien ne fonctionne, je pense que cela vient du switch, quand je rentre un valeur, l'appli se ferme.

    Cordialement

    A bientôt

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Re

    Je dois faire la convertion avant ou apres l'affectation.

    A+

  3. #3
    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 argon
    Re

    Je dois faire la convertion avant ou apres l'affectation.

    A+
    En fait le problème ne viens pas de là, c'est juste un problème de buffer dans le buffer d'entrée. Quand tu saisies une valeur et que tu la récupère avec getchar il se peut que des caractères supplémentaires s'ajoutent donc le mieux serais d'utiliser fgets puis de convertir cette chaine avec strtol.

    Voici un petit exemple:
    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
    #include <stdio.h>
     
    int main (void)
    {
       int val = -1;
       char s [5];
     
     
       printf ("Chiffre : ");
       fgets (s, sizeof s, stdin);
       val = (int) strtol (s, NULL, 0);
       printf ("Votre chiffre : %d\n", val);
     
     
       return 0;
    }
    Biensur, il ne faut pas oublier certaines vérification, nottament sur le retour de fgets ! En espérant avoir pu t'aider
    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 !

  4. #4
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut, pour récupérer un flottant sur la console tu devrais utiliser:

    #include <string.h>

    char buffer[256];
    fgets(stdin,256,buffer);
    char *tmp[1];
    float nombre = strof(buffer,tmp);
    if (**tmp == '\n') // la saisie s'est bien passé

  5. #5
    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 acx01b
    salut, pour récupérer un flottant sur la console tu devrais utiliser:

    #include <string.h>

    char buffer[256];
    fgets(stdin,256,buffer);
    char *tmp[1];
    float nombre = strof(buffer,tmp);
    if (**tmp == '\n') // la saisie s'est bien passé
    Il faut faire attention quand on donne un morceau de code, donner un code faux c'est pas bien, regarde bien la fonction fgets, tu as inversé le buffer et stdin ! Utilise aussi les balises code, c'est là pour 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 !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Re

    Pour Question()

    C'est un simple entier qui est saisie.


    A+

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    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.

  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 argon
    J'ai un probleme pour la réalisation d'un programme structuré en mode console.
    Pas trop bien structuré en fait, il est trop découpé vu sa taille. Les fonctions correspondant à des conversion d'une devise à une autre, je les auraient toutes regroupées dans un seul module genre devises.c / devises.h

    Ta fonction preprog, si elle ne sert à rien d'autre, enlève là et appeles directement ta fonction Question !

    Ta structure Type, si elle n'est vouée qu'à contenir une seul valeur, celle du choix utilisateur, ca ne sert à rien, utilises plutôt une variable locale à main dans ce cas, c'est mieux !
    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
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Vla une question interessante soulevée par Francky
    "Est ce que c'est inutile d'avoir une fonction qui ne fait qu'en appeler une autre?"

    En fait, dans mes problematiques, je cherche l'evolutivité, et je me suis apperçu que plus ya de couches, plus c'est evolutif.
    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
    static void eteindre_le_cerveau(void)
    {
      /* du code.. */
    }
     
    static void s_endormir(void)
    {
     eteindre_le_cerveau();
    }
     
    static void dormir(void)
    {
      s_allonger();
      s_endormir();
    }
     
    void se_reposer(void)
    {
      dormir();
    }

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Re

    J'ai réglé mon probleme.

    Je vous joins le zip.

    A +
    Fichiers attachés Fichiers attachés

  11. #11
    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 argon
    J'ai un probleme pour la réalisation d'un programme structuré en mode console.
    Avant de faire quoi que ce soit, je te conseille de respecter les regles de bons sens qui guident la production de code, à savoir
    1. Spécification
    2. Conception
    3. Réalisation

    Si tu brûles les étapes, tu aboutis à un code absurde et mal organisé.

    Je t'engage donc à repartir de la spécification et à écrire une conception correcte :

    2.1 Algorithme textuel (phrases)
    2.2 Algorithme formel (pseudo-code)

    Et là, tu verras que le découpage en modules et en fonctions se fera tout seul selon la structure du programme, et pas au hasard.

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

Discussions similaires

  1. [XSLT] Probleme de structure de fichier xsl
    Par ben23 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/07/2006, 10h46
  2. C++ - Probleme avec structure et template
    Par vdumont dans le forum Langage
    Réponses: 3
    Dernier message: 21/03/2006, 15h32
  3. Probleme taille structure / parsing tag mp3
    Par lucas_sophia dans le forum C
    Réponses: 6
    Dernier message: 19/03/2006, 16h56
  4. Méta-Programmation - [ structures de données ]
    Par Dam)rpgheaven dans le forum C++
    Réponses: 3
    Dernier message: 03/12/2004, 19h38
  5. Réponses: 3
    Dernier message: 28/09/2003, 17h08

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