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 :

Imbriquer plusieurs switch ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut Imbriquer plusieurs switch ?
    Bonjour, à tous,
    j'ai juste une petite question :
    - peut - on imbriquer plusieurs switch - case l'un dans l'autre ?
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch ( reponse1) {
    case (1) :
        printf "eee";
    case (2):
        printf "ffff";
             switch (reponse2) {
              case(1):
            printd "test réussi");
     
    etc..etc..
    Ps : le code que j'indique ci dessus n''est qu'un exemple pour simplifier ma question..Il est claire qu'en temps que tel le code n'est pas bon...

    Merci d'avance
    a+

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Un switch définissant une instruction, tu peux mettre un switch à n'importe quel endroit où une instruction peut apparaître, point final. Peut-être que ceci pourra t'aider : Les instructions du langage C

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    la preuve par l'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
    17
    18
    19
    20
    #include <stdio.h>
     
    int main(void)
    {
            int a = 0, b = 1;
            switch(a) {
            case 0 :
                    switch(b) {
                    case 1 :
                            printf("Les switch imbriqués, ça fonctionne.\n");
                            break;
                    default :
                            printf("Les switch imbriqués, ça ne fonctionne pas.\n");
                    }
                    break;
            default :
                    printf("Les switch imbriqués, ça ne fonctionne pas.\n");
            }
            return 0;
    }
    Résultat :
    Les switch imbriqués, ça fonctionne.
    Pourquoi pensais-tu que l'imbrication des switch (ou autre conditionnelles) ne fonctionnerait pas? Il n'y a aucune raison à cela

    ++

    €dit : grilled
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Oui je pensaits bien que l'on pouvait imbirquer..seulement voilà j'ai un message d'"erreur, non pas à la compilation du programme mais au moment de l'exécution qui me dit :
    line 103: 16110 Erreur de segmentation "$pgm" "$@"
    Mon code :
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    /*
     * 
     */
    int main(int argc, char** argv) {
     
     
     
        int xPrincipal;                  // Choix du menu principal
        int xInteret;                    // Choix du menu intérêts
     
                        float CapitalPrete;         // Variable du montant prêté, placé..
                        int nbAnneesPlacement;      // Variable de la durée     
                        float TauxPlacement;        // Variable du taux de placement
                        float InteretSimple;        // Variable de résultat
        // printf("\x1B[2J" ); // Pour effacer l'écran
     
        system("clear");
     
        printf("\n\n\n\n\n");
        printf("        Intérêts  =   1\n");
        printf("        Taux      =   2\n");
        printf("        Crédits   =   3\n");
     
        printf("\n\n");
        printf("\t\t Indiquez votre choix : ");
     
        //ChoixMenuPrincipal = getchar();
        scanf("%d",&xPrincipal);
     
     
        switch (xPrincipal) {
     
            case(1):
     
                system("clear");
     
                printf("\n\n");
                printf("Calcul de l'intérêt simple  = 1\n");
                printf("Calcul de l'intérêt sur une durée de placement = 2\n");
                printf("\n\n");
                printf("Retour Menu Principal = 0\n\n");
                printf("Sélectionnez votre choix : ");
     
               // ChoixMenuInteret = getchar();
                scanf("%d",xInteret);
     
            break; 
    ////////////////// Calcul sur les intérêt /////////////////////////////////            
                switch (xInteret) {
     
                    case(0):
                        printf("Ok -> retour menu principal\n");
     
                    break;
     
                    case (1) :
                    //  float CapitalPrete;         // Variable du montant prêté, placé..
                     //   int nbAnneesPlacement;      // Variable de la durée     
                     //   float TauxPlacement;        // Variable du taux de placement
                     //    float InteretSimple;        // Variable de résultat
     
                        printf("CACUL DE L'INTERET SIMPLE\n");
                        printf("\n\n\n");
                        printf("Montant du Capital ; \n");
                        scanf("%f",CapitalPrete);
                        printf("Nombre année(s) de la durée du prêt ( ou du placement)");
                        scanf("%d",nbAnneesPlacement);
                        printf("Taux du prêt ( ou du placement) :");
                        scanf("%f",TauxPlacement);
                        InteretSimple = ((CapitalPrete*TauxPlacement*nbAnneesPlacement)/100);
     
                        printf("Un capital de %f",CapitalPrete);
                        printf("placé ou prêté pendant %d", nbAnneesPlacement);
                        printf("an(s), au taux de %f", TauxPlacement);
                        printf(" %% ");
                        printf("fournira au prêteur un intérêt égal à : %f", InteretSimple);
                        printf(" %%\n");
     
                    break;        
     
                }
     
        }
     
     
     
     
     
        //return (EXIT_SUCCESS);
        return (0);
    }

    est ce la redondance d'utilisation du case (1) qui peuts créer une confusion entre les différents switch case..bien que celà ne devrait pas...?

    A savoir je suis sous linux et j'utilise netbeans comme IDE...

  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    De trois choses l'une :

    1. Dans les case, pas besoin de mettre de parenthèses autour de ta valeur, donc case 1
    2. Tu fais des scanf sur des variables non déclarées, de plus, il manque le passage par référence lors du scan, ce qui n'est évidemment pas bon
    3. Pense à purger le flux d'entrée...


    Corrige ça et t'y verras plus clair
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Autre chose encore, ta fonction "CalculInteret" ne sera jamais appelée étant donné que tu place un "break" juste avant

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Je viens de rectificer le code par rapport à case, ainsi que suppresion du break..

    Tu fais des scanf sur des variables non déclarées, de plus, il manque le passage par référence lors du scan, ce qui n'est évidemment pas bon
    C'est pas bon ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int xInteret;                    // Choix du menu intérêts
    ...
    ...
    ...
     
     scanf("%d",xInteret);

    3. Pense à purger le flux d'entrée...
    Comment et pourquoi purger ?
    a+

  8. #8
    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 buchs Voir le message
    De trois choses l'une :
    Euh, non ! Les 3 points sont importants ...

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

Discussions similaires

  1. requetes imbriquées : plusieurs colonnes
    Par AliceG dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/04/2013, 11h50
  2. Imbriquer plusieurs swf à la suite
    Par biguiz dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 11/03/2010, 13h05
  3. comment imbriquer plusieurs evenements
    Par nazimb dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 05/07/2006, 14h57
  4. [vb6] Imbriquer plusieurs tableaux
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 22/06/2006, 16h49

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