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 :

Questions sur switch et déclarations de variables


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut Questions sur switch et déclarations de variables
    Bonjour,

    Je débute en C++ (avec des connaissances en C) et je suis en train de réaliser mon premier programme.

    1) J'ai eu a faire la déclaration de 63 variables (c1, c2, c3,...,c63) et si pour un futur programme j'ai a faire la même chose j'aimerai savoir s'il n'existait pas un moyen de raccourcir cela en faisant une boucle du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<=63;i++)
    {
         int c[i]=0;
    }
    2) J'ai un switch assez grand mais avec des cases qui fonctionne comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case 1 :
         paramètre 1;
         break;
    case 2 :
         paramètre 1; // Le même que dans le case 1
         paramètre 2;
         break;
    case 3:
         paramètre 1; // Le même que dans le case 1
         paramètre 2; // Le même que dans le case 2
         paramètre 3;
         break ;
    Et je me demandais s'il n'existait pas un moyen de raccourci ceci avec un genre d'hérédité des case ? Ce qui me permettrait de n'avoir qu'a écrire qu'une ligne dans chaque case, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    case 1 :
         paramètre 1;
         break;
    case 2 :
         //Importation des paramètres du case 1
         paramètre 2;
         break;
    case 3:
         //Importation des paramètres du case 2
         paramètre 3;
         break ;
    Cordialement,

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 247
    Par défaut
    Citation Envoyé par Iron-Avenger Voir le message
    1) J'ai eu a faire la déclaration de 63 variables (c1, c2, c3,...,c63) et si pour un futur programme j'ai a faire la même chose j'aimerai savoir s'il n'existait pas un moyen de raccourcir cela en faisant une boucle du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<=63;i++)
    {
         int c[i]=0;
    }
    Je connais pas bien le C++ (pas du tout même) mais je doute que ce soit possible.
    Par contre, au lieu de déclarer 63 variables de type int, tu dois pouvoir déclarer un seul tableau de int de taille 63.

    Citation Envoyé par Iron-Avenger Voir le message
    2) J'ai un switch assez grand mais avec des cases qui fonctionne comme ceci :
    ....
    Tout dépend si l'ordre de tes instructions est important.

    S'il ne l'ai pas, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case 3 :
         paramètre 3;
    case 2 :
         paramètre 2;
    case 1:
         paramètre 1; // Le même que dans le case 1
         break ;
    Bien que perso, je n'aime absolument pas cette syntaxe, à cause de l'absence des break, source de bug et d’incompréhension surtout lors d'évolutions future du code.

    Par contre, si l'ordre de tes instructions est important, là, je sais pas. Joker!

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut
    pour la déclaration de 63 variables, si j'ai bien compris , tu peut déclarer un tableau de taille 63:
    pour le switch j'ai pas compris, c'est quoi parametre 1...

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Tout dépend si l'ordre de tes instructions est important.

    S'il ne l'ai pas, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case 3 :
         paramètre 3;
    case 2 :
         paramètre 2;
    case 1:
         paramètre 1; // Le même que dans le case 1
         break ;
    Non l'ordre de mes instructions n'est pas importants (normalement dans un switch l'ordre n'a aucune importante ?) mais le code que tu propose ne change rien vu que dans case 3 il n'y a pas les paramètres 2 et 1
    ---------------------------------------------------------------------------
    Citation Envoyé par b-med Voir le message
    pour la déclaration de 63 variables, si j'ai bien compris , tu peut déclarer un tableau de taille 63:
    pour le switch j'ai pas compris, c'est quoi parametre 1...
    L'astuce fonctionne mais du coup je suis obligé de renommer toutes mes variables : c[1], c[2],...,c[63] ^^


    "Paramètre 1" c'est juste pour dire que c'est un paramètre qui est dans mon case 1, et donc a chaque case qui suit j'ai le(s) paramètre(s) du(des) case(s) d'avant + le nouveau paramètre du case actuel, mon switch ressemblerai a sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case 9:
         fichier << nomchaine[c9] << endl;
         break;
    case 10 :
         fichier << nomchaine[c9] << endl;
         fichier << nomchaine[c10] << endl;
         break;
    case 11:
         fichier << nomchaine[c9] << endl;
         fichier << nomchaine[c10] << endl;
         fichier << nomchaine[c11] << endl;
         break;

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Par défaut
    Non l'ordre de mes instructions n'est pas importants (normalement dans un switch l'ordre n'a aucune importante ?) mais le code que tu propose ne change rien vu que dans case 3 il n'y a pas les paramètres 2 et 1
    regarde bien le code, in ne contient pas un "break",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case 3 :
         paramètre 3;
    case 2 :
         paramètre 2;
    case 1:
         paramètre 1; // Le même que dans le case 1
         break ;
    donc le case 3, va s'exécuter et même case 2 et case 1 (il y a pas de break)
    car break entraine la sortie du switch, donc le code marche bien.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    Citation Envoyé par b-med Voir le message
    regarde bien le code, in ne contient pas un "break",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    case 3 :
         paramètre 3;
    case 2 :
         paramètre 2;
    case 1:
         paramètre 1; // Le même que dans le case 1
         break ;
    donc le case 3, va s'exécuter et même case 2 et case 1 (il y a pas de break)
    car break entraine la sortie du switch, donc le code marche bien.
    En effet je n'avais pas vu. Je test sa ^^

    Mais maintenant je suppose que l'ordre a de l'importance ? Donc dans mon cas il faudrait le case 1 d'abord et donc je finirai par le case 63 avec un break ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    Cela semble fonctionner, merci beaucoup de votre aide

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 247
    Par défaut
    Citation Envoyé par Iron-Avenger Voir le message
    "Paramètre 1" c'est juste pour dire que c'est un paramètre qui est dans mon case 1, et donc a chaque case qui suit j'ai le(s) paramètre(s) du(des) case(s) d'avant + le nouveau paramètre du case actuel, mon switch ressemblerai a sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case 9:
         fichier << nomchaine[c9] << endl;
         break;
    case 10 :
         fichier << nomchaine[c9] << endl;
         fichier << nomchaine[c10] << endl;
         break;
    case 11:
         fichier << nomchaine[c9] << endl;
         fichier << nomchaine[c10] << endl;
         fichier << nomchaine[c11] << endl;
         break;
    Tu n'as que ça dans ton switch ?

    Si tu n'as que ça, je vois pas l’intérêt d'un switch, une boucle For devrait suffire je pense (si ça existe en c++, mais j'imagine que oui)

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant à l'école 42
    Inscrit en
    Avril 2013
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant à l'école 42

    Informations forums :
    Inscription : Avril 2013
    Messages : 59
    Par défaut
    Non j'ai 54 case comme ça (Oui le For existe en C++).

    Mais cela fonctionne avec vos solutions ^^

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Iron-Avenger Voir le message
    Non j'ai 54 case comme ça (Oui le For existe en C++).

    Mais cela fonctionne avec vos solutions ^^
    Cela fonctionne, certes, mais ta solution passant par un switch est totalement absurde

    Si tu veux écrire toutes les données que tu as dans un tableau, pourquoi ne pas tout simplement utiliser une boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i = 0 ; i< size; ++i){ //size == le nombre d'éléments de ton tableau ;)
        fichier<<tab[i];
    }
    et, pour la lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i = 0;i< size;++i){ //idem :D
    fichier>>tab[i];
    }
    car:
    1. comme l'a dit sevyc64, un "case" sans son "break", c'est moyen moyen
    2. Si, pour une raison ou une autre, tu décide de rajouter des cases (passer de 8*8 à 9*9, par exemple ) tu vas te trouver face à l'obligation de rajouter tous les cas intermédiaires
    3. Il faut veiller à utiliser les solution adaptées: les boucles sont adaptées pour parcourir des éléments, les switch, tout comme les if, sont adaptés pour sélectionner une partie de la logique en fonction des circonstances
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. question sur switch
    Par deubelte dans le forum C++
    Réponses: 6
    Dernier message: 27/06/2011, 10h54
  2. Questions sur les fonctions et les variables
    Par dam28800 dans le forum jQuery
    Réponses: 2
    Dernier message: 10/08/2010, 09h54
  3. Réponses: 9
    Dernier message: 17/11/2009, 20h26
  4. Réponses: 0
    Dernier message: 08/07/2008, 11h11
  5. petite question sur la récupération d'une variable
    Par minusette dans le forum Langage
    Réponses: 6
    Dernier message: 17/11/2005, 16h57

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