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 :

bug sur le résultat


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut bug sur le résultat
    Bonjour à tous,

    voila mon programme (ci dessous) le but de celui ci et afficher les réponses a un questionnaire
    on doit rentrer son nom et son code postale dans des fonctions différentes et dans une troisième les afficher :
    pour le programme je suis pas un très grand programmateur donc y doit surement être possible de le simplifié.
    merci d'avance de votre aide car le problème c'est qu'il affiche de truc bizarre c'est à dire smiley ou '' ou #

    la fonction saise_nom nous demande d'entrer un nom
    la fonction void format_alphabetique vérifie si ce sont des caractères et pas des chiffres
    la fonction saisie_code nous demande d'entrer un code postal
    la fonction void format_numerique vérifie si ce sont des chiffres
    la fonction void coherence_codepostal vérifie si le code postal existe compris entre 01000 et 97999
    la fonction int puissance(int a, int b) me donne la valeur de a^b

    la fonction void affiche_caractéristique doit m'afficher le nom saisie dans la fonction précédente si il est correct et le code postal si il est correct

    Sans oublier le menu ^^

    Code C : 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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void format_alphabetique(); //vérifie si ce sont des caractères
    void format_numerique(); // vérifie si ce sont de chiffre
    void menu();
    void coherence_codepostal(); // vérifie si le code postal existe
    int puissance(int a, int b);
     
     
    //____________________________________________Fonctions pour Saisie_nom__________________________________
     
    void saisie_nom(char nom[])
          {
           //char nom[40];
           printf("\nComment t'appelles-tu petit ? ");
           scanf("%s", nom);
           format_alphabetique(nom);
          }
     
    void format_alphabetique(char saisie[])
        {
          int g;
          char nom[40];
          g=0;
           while ((saisie[g]!= '\0') && (g<=40) && (((saisie[g]>= 'a') && (saisie[g]<= 'z')) || ((saisie[g]>= 'A') && (saisie[g]<= 'Z'))))  // Vérification de la saisie
                 {
                  printf("%c",saisie[g]);
                  g=g+1;
                  }
          if ((g>40)||(saisie[g]!= '\0'))         //Résultat de la vérification de la saisie du nom
              {
              printf("\n\aErreur Veuillez reccomencer!! \n");
              saisie_nom(nom);
              }
              printf("\nVous avez saisie un nom correct!! Merci");
              menu();
        }
     
    //_______________________________________________Fonctions pour Saisie_code_______________________________
     
    void saisie_codepostal(char codepostal[])
          {
           char codep[6];
           printf("\nQuelle est ton code postal ? ");
           scanf("%s",codep);
           format_numerique(codep);
     
          }
     
    void format_numerique(char saisie[])
         {
          int g,cod,z,code;
          char codepostal[6];
          g=0;
          z=4;
          code=0;
           while ((saisie[g] >= '0') && (saisie[g] <= '9') )  // Vérification de la saisie
                 {
                  cod= puissance(10,z);
                  code=(saisie[g]-48)*cod+code;
                  z=z-1;
                  g=g+1;
                  }
          if ((g=5)&&(saisie[g]== '\0'))         //Résultat de la vérification de la saisie du nom
              {
              printf("\nVous avez saisie un code correct!! Merci");
     
              coherence_codepostal(code);
              }
          else
              {
              printf("\n\aErreur Veuillez reccomencer!! \n");
              saisie_codepostal(codepostal);
              }
         }
     
    void coherence_codepostal(int cod)
        {
         char codepostal[6];
         if  ((cod >= 1000) && (cod <= 97999))
             {
              printf("\n Code valide!!");
             menu();
             }
         else
             {
             printf("\n Code invalide, ressayer!!");
              saisie_codepostal(codepostal);
             }
        }
     
    int puissance(int a, int b)
    {
       int i,puis;
       puis=a;
       if (b==0) puis=1;
        else{
       for(i=1; i<b;i=i+1)
          {
           puis=puis*a;
          }}
       return puis;
    }
     
    //_____________________________________Affiche les caractéristiques________________________________
     
    void affiche_caracteristique(char codepostal[], char nom[])
          {
          printf("\n %s", codepostal);
          printf("\n___________\n");
          printf("\n %s", nom);
          }
     
     
    //_______________________________________Cette fonction propose le menu du questionnaire._________________
     
    void menu()
         {
          int choix;
          char nom[40];
          char codepostal[6];
          do
          {
          printf("\nQuestionnaire : \n (1) Saisie nom \n (2) Saisie du code postal \n (3) Affichage des caracteristiques de la personne \n (4) Fin :");
          scanf("%d",&choix);
          }
          while ((choix!=1)&(choix!=2)&(choix!=3)&(choix!=4));
          switch (choix)
          {
            case 1: saisie_nom(nom);
                   break;
            case 2: saisie_codepostal(codepostal);
                   break;
            case 3: affiche_caracteristique(codepostal,nom);
                   break;
            case 4: return;
                   break;
            default : printf("Erreur de choix! Veuillez recommencer s'il vous plait\n\n");
                   break;
          }
         }
     
    //_____________________________________Programme_____________________________________________________________
     
    int main()
    {
       menu();
    return 0;
    }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Il y a beaucoup de choses qui ne vont pas dans ton code. Notamment :

    1) Tu appelles certaines fonctions de manière récursive. Par exemple, dans la fonction "coherence_codepostal", tu rappelles la fonction "menu".
    L'appel d'une fonction ne correspond pas à un JUMP mais à un CALL. Risque de crash de la pile. Et comportement indésirable du programme assuré.

    2) Il y a un problème de structuration du programme, qui pose un problème d'incohérence au niveau de l'exécution (cela rejoint le point 1/ également).
    Exemple :
    "coherence_codepostal" devrait retourner une valeur dont se servira la fonction appelante (ou celle qui a appelé la fonction appelante), pour le cas échéant redemander la saisie du code postal.

    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fonction 'saisie code postal'
    tant que
    demande saisie
    variable_test = valeur retour de la fonction testant le code postal
    fin tant que variable_test est mauvais
    fin fonction
    3) Tu remplis les tableaux locaux aux fonctions. Une fois les fonctions finies, les tableaux sont détruits (ainsi que leur contenu). D'où un affichage bizarre au niveau des fonctions appelantes, car le tableau de la fonction "menu" ne sont pas modifiés (contenu indéterminé).

    4) Dans la fonction "menu" :
    Le switch devrait se situer dans la boucle principale.
    La condition permettant de boucler doit être modifiée par conséquent.

    5) Confusion de l'opérateur = avec == (ainsi que & au lieu de &&).

    J'ai pas tout vérifié. Déjà, il faut corriger tout ça.

Discussions similaires

  1. [Firebird] DELETE sur le résultat d'une requete d'un IBQUERY
    Par shashark dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/06/2005, 18h17
  2. [Plugin][VE]Bug sur Eclipse Visual Project Editor
    Par capitaine_choc dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 31/05/2005, 14h51
  3. Bug sur glColor3i !
    Par ZiZouJH dans le forum OpenGL
    Réponses: 23
    Dernier message: 04/06/2004, 10h21
  4. Bug sur la prorpiété required d'un TField avec ADO ???
    Par denrette dans le forum Bases de données
    Réponses: 6
    Dernier message: 04/11/2003, 11h04
  5. Page de rapport de bug sur le site de Sun
    Par piff dans le forum Général Java
    Réponses: 1
    Dernier message: 03/03/2003, 18h12

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