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 :

Mauvaise gestion des directives utilisateurs


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Mauvaise gestion des directives utilisateurs
    Actuellement, je travaille sur un projet donne en classe.
    J'ai constitue un menu avec switch case ou l'utilisateur devra choisir la tache a effectuer car le programme est multi-tache.
    Et l'affichage du menu doit etre toujours present pour le cas ou l'utilisateur voudrait realiser une action differente.La j'ai fait usage d'une boucle pour afficher le menu de maniere continu.
    Jusque la pas de probleme
    Il va y en avoir au moment ou je veux faire en sorte que l'utilisateur ait fait un mauvais choix
    Vous allez voir ma source

    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
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "msg.h"
    #include "fct.h"
    #include <conio.h>
    #define BANNIERE printf("\t\t\t**************************\n");\
                     printf("\t\t\t*******  Bienvenue *******\n");\
                     printf("\t\t\t*** Sur le MULTI_TACHE ***\n");\
                     printf("\t\t\t**************************\n\n\n");
     
     
    int main(int argc,char** argv)
    {
        char chx,anag[TAILLECHAR];
        int valfact,combn,combp,i;
        do
        {
            BANNIERE
            menu_prog();
            scanf("%c",&chx);
            fflush(stdin);
            switch(chx)
            {
                case 'a':
                case 'A':{
                            printf("\t\tQue voulez vous ecrire dans votre fichier\n");
                            ecrire_ds_fichier();
                            break;
                            }
                case 'b':
                case 'B':{
                            affich_from_fichier();
                            break;
                            }
                case 'c':
                case 'C':{
                						printf("\t\tEntrez la valeur dont vous voulez calculer la factoriel\n");
    												scanf("%d",&valfact);
    												 printf("\t\tLa factorielle de %d est %ld\n",valfact,facto(valfact));
    												 break;
                            }
                case 'd':
                case 'D':{
    											rap_comb();//position de la fonction pour etre  visible apres pasaj deif
    											do
    											{
    													printf("\t\tEntrez la valeur de p\n");
    													scanf("%d",&combp);
    													printf("\t\tEntrez la valeur de n\n");
    													scanf("%d",&combn);
    													if( combn<combp||combn<0||combp<0 )
    													{
    															printf("\t\tErreur!!! Relire le rappel attentivement\n");
    															printf("\t\tPressez une touche pour continuer\n");
    															system("pause");//system("cls");
     
    													}
    											}while(combn<0||combp<0);
    											printf("\t\tLa combinaison de %d dans %d est: %f\n",combp, combn,comb_2_nb(combn,combp));
    											break;
                            }
                case 'e':
                case 'E':{
    											printf("\t\tEntrez le mot dont vous voulez l'anagramme\n");
    											scanf("%s",anag);
    											printf("\t\tL'anagramme de %s est: ",anag);
    											for(i=strlen(anag);i>=0;i--)
    											{
    											    printf("%c",anag[i]);
    											}
    											printf("\n");
    											break;
                            }
                case 'f':
                case 'F':{
                					date();
                					break;
     
                            }
                case 'g':
                case 'G':{
                                eteindre();
                                break;
                            }
                case 'h':
                case 'H':{
                                break;
                            }
                case 'i':
                case 'I':{
                                break;
                            }
            }
     
            if(chx!='a'||chx!='A'||chx!='b'||chx!='B'||chx!='c'||chx!='C'||chx!='d'||chx!='D'||chx!='e'||chx!='E'||chx!='f'||chx!='F'||chx!='g'||chx!='G'||chx!='h'||chx!='H'||chx!='i'||chx!='I')
            {
                printf("\tCe n'est pase une option valide\n");
                printf("\tVeuillez bien regarder les directives du menu\n");
            }
            system("pause");system("cls");
        }while(chx!='a'||chx!='A'||chx!='b'||chx!='B'||chx!='c'||chx!='C'||chx!='d'||chx!='D'||chx!='e'||chx!='E'||chx!='f'||chx!='F'||chx!='g'||chx!='G'||chx!='h'||chx!='H'||chx!='i'||chx!='I');
        //printf("Hello world!\n");
        system("pause");
        return 0;
    }
    Le probleme c'est le if qui s'excute meme quand l'utilisateur fait un bon choix au menu..
    J'espere que j'ai ete assez clair
    Un grand merci deja a vous pour le temps que vous allez prendre pour visionner ma source.Et aussi pour vos conseils.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 12
    Points
    12
    Par défaut
    je crois que tu t'es trompé dans l'opérateur logique de ta condition. Essaye avec '&&'

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 12
    Points
    12
    Par défaut
    Ta condition peut s'écrire comme ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ( ! ( (chx>='a' && chx<='i') || (chx>='A' && chx<='I'))
    {
        printf("\tCe n'est pase une option valide\n");
        printf("\tVeuillez bien regarder les directives du menu\n");
    }

  4. #4
    Membre éclairé
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Points : 807
    Points
    807
    Par défaut
    Tu devrais sans doute y aller un peu plus doucement avec l'indentation.
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Merci harta
    Citation Envoyé par harta Voir le message
    je crois que tu t'es trompé dans l'opérateur logique de ta condition. Essaye avec '&&'
    Rire!!!!Rire!!!C'est fou!! C'était vraiment substile comme erreur(algebre de boole)WOOOOWWWW
    L'opérateur logique que j'ai choisi: le "OU"
    Il arrive qu'en faisant un bon choix, ce choix est également différent des autres
    Puisqu'il l'est le IF doit s'executer

    C'est bien de voir ses erreurs

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Merci
    Citation Envoyé par harta Voir le message
    Ta condition peut s'écrire comme ça aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ( ! ( (chx>='a' && chx<='i') || (chx>='A' && chx<='I'))
    {
        printf("\tCe n'est pase une option valide\n");
        printf("\tVeuillez bien regarder les directives du menu\n");
    }
    Un grand merci!!
    Mais je préfère remplacer par &&. Vu que je ne comprend pas assez le syntaxe
    Vous pourriez peut-être m'éclaircir un peu?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Merci&&Explication
    Citation Envoyé par Kirilenko Voir le message
    Tu devrais sans doute y aller un peu plus doucement avec l'indentation.
    Je voudrais savoir pourquoi je devrais aller mollo avec l'indentation.
    Ce ne serait pas un moyen de rendre ses codes lisibles?
    De mieux se repérer en cas d'erreur?

    Pour le lien?

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par alexisleprogrammeur Voir le message
    Je voudrais savoir pourquoi je devrais aller mollo avec l'indentation.
    Ce ne serait pas un moyen de rendre ses codes lisibles?
    De mieux se repérer en cas d'erreur?
    A partir de la case C de ton switch, tu pars trop sur a droite ce qui rend ton code moins lisible.
    Généralement on rajoute une tabulation ou 4 à 8 espaces (selon les préférences) par blocs imbriqués.

  9. #9
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Et, de façon générale, ne mélange pas caractères TAB et espace (j'ai dit caractère, pas touche). L'"apparence" (le rendu) des tabulations se reglent via les préférences des éditeurs et tout le monde ne choisit pas la même valeur : 3, 4, 8 ... Si tu mélanges tab et espace, ton code qui t'apparait propre "chez toi" peut devenir un vrai fouillis quand il est exploité par quelqu'un d'autre.

    Le mieux est de configurer ton éditeur favori pour qu'il génère des caractères espaces en lieu et place des tabulations. Quand ton code est lu par quelqu'un d'autre, sur son propre éditeur, avec ses propres réglages, il n'y a alors aucun problème : un caractère espace est interprété de la même façon partout.

    Ceux qui, en plus du C, développent en Python comprendront tout de suite l'intérêt de procéder de la sorte ...
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Ceux qui, en plus du C, développent en Python comprendront tout de suite l'intérêt de procéder de la sorte ...
    +1

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alexisleprogrammeur Voir le message
    Un grand merci!!
    Mais je préfère remplacer par &&. Vu que je ne comprend pas assez le syntaxe
    Vous pourriez peut-être m'éclaircir un peu?
    Bonjour
    Il s'agit des classiques lois de De Morgan
    Si A et B sont des expressions boolennes, alors
    • non (A ET B) = non(A) OU non(B)
    • non (A OU B) = non(A) ET non(B)


    Exemple: tu veux un nombre entre 5 et 10, alors il faut que ton nombre soit plus grand que 5 ET plus petit que 10. Inversement tu ne veux pas un nombre entre 5 et 10, alors il faut que ton nombre soit plus petit que 5 OU plus grand que 10.

    Autre exemple: il est parfois ecrit "defense de cracher et fumer" ce qui signifie, dans la logique absolue, qu'on peut faire l'un ou l'autre mais pas les deux a la fois. L'auteur de ce genre d'affiche aurait etudie les lois de De Morgan, il aurait ecrit "defense de cracher ou fumer" ce qui se serait traduit alors par "defense de cracher ET defense de fumer"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    l'autre idéal étant de faire le choix suivant: tabulations avant le premier caractère "utile", espaces après.
    ainsi, les indentations s'adaptent au goût des gens sans jamais les trahir.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Points : 5
    Points
    5
    Par défaut suggestion : default
    Bonjour,

    Pour en revenir au problème de base, le "switch" permet en plus des différents "case" d'avoir le cas "default", qui peut justement servir à traiter les cas non valides. En l'occurrence, ça me paraît plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch (chx)
    {
            (...)
     
            case 'i':
            case 'I':
                    break;
     
            default :
                    printf("\tCe n'est pas une option valide\n");
                    printf("\tVeuillez bien regarder les directives du menu\n");
                    break;
    }

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Tu as raison
    Citation Envoyé par Chanur Voir le message
    Bonjour,

    Pour en revenir au problème de base, le "switch" permet en plus des différents "case" d'avoir le cas "default", qui peut justement servir à traiter les cas non valides. En l'occurrence, ça me paraît plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch (chx)
    {
            (...)
     
            case 'i':
            case 'I':
                    break;
     
            default :
                    printf("\tCe n'est pas une option valide\n");
                    printf("\tVeuillez bien regarder les directives du menu\n");
                    break;
    }
    Normalement le default je l'avais utilise dans l'encienne version de mon programme.Je ne sais pas pourquoi j'ai choisi d'utilise ce IF. Mais ca en valait la peine de ne pas rester sur le plus simple vu que j'ai pu remarquer une belle application de la loi de De Morgan en C.

    Cela m'a vraiment plu et je ne regrette pas du tout d'avoir publier cette requette sur ce forum. Les gens sont vraiment bien et les réponses très utiles.

    VIVE L'ACTIVITE LIBRE: PROGRAMMATION

    Merci beaucoup Chanur!!!

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 29
    Points : 38
    Points
    38
    Par défaut Thanks
    Citation Envoyé par Sve@r Voir le message
    Bonjour
    Il s'agit des classiques lois de De Morgan
    Si A et B sont des expressions boolennes, alors
    • non (A ET B) = non(A) OU non(B)
    • non (A OU B) = non(A) ET non(B)


    Exemple: tu veux un nombre entre 5 et 10, alors il faut que ton nombre soit plus grand que 5 ET plus petit que 10. Inversement tu ne veux pas un nombre entre 5 et 10, alors il faut que ton nombre soit plus petit que 5 OU plus grand que 10.

    Autre exemple: il est parfois ecrit "defense de cracher et fumer" ce qui signifie, dans la logique absolue, qu'on peut faire l'un ou l'autre mais pas les deux a la fois. L'auteur de ce genre d'affiche aurait etudie les lois de De Morgan, il aurait ecrit "defense de cracher ou fumer" ce qui se serait traduit alors par "defense de cracher ET defense de fumer"...



    c'est cool je peux dire
    Puisqu'en classe j'ai vraiment suivi le cours d'algèbre de Bool et pas même pendant une seconde je me suis du fameux loi de De Morgan.
    Merci de m'avoir "rafraichi la mémoire" comme on dit bien souvent dans mon pays.

    Thanks

Discussions similaires

  1. gestion des droits utilisateurs par vba
    Par laurent.w dans le forum Sécurité
    Réponses: 14
    Dernier message: 17/01/2007, 08h09
  2. [WD9] gestion des privilèges utilisateurs
    Par dreamland dans le forum WinDev
    Réponses: 3
    Dernier message: 15/01/2007, 16h21
  3. Gestion des comptes utilisateurs
    Par tibal dans le forum Administration
    Réponses: 6
    Dernier message: 10/11/2006, 11h10
  4. gestion des droits utilisateurs struts
    Par ijklm dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/05/2006, 19h17
  5. firefox - mauvaise gestion des passwords
    Par photorelief dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/06/2005, 09h02

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