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 :

Case a contourné l'initialisation d'une var


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 503
    Par défaut Case a contourné l'initialisation d'une var
    bonsoir,

    j'ai fait un petit programme qui devrais afficher aleatoirement le loto ou euromillions (de toute façon 1 chance sur 14 millions pour le loto et 1 chance sur 77 millions sur euromillions j'y compte pas trop deçu)

    le probleme c'est que mon compilateur me lance :
    [C++ Erreur] lop.cpp(134): E2126 Case a contourné l'initialisation d'une variable locale.

    pouvez vous m'aider s'il vous plait merci !


    #include <iostream.h>

    #include <stdlib.h>
    #include <time.h>
    #include <vcl.h>
    #pragma hdrstop

    //---------------------------------------------------------------------------

    #pragma argsused


    class loto
    {
    private :
    int grille[49];
    int lot[7];
    int nombre;
    public:
    loto ()
    {
    int i=0;
    for (i=0;i<49;i++)
    {
    grille[i]=0;
    }
    for (i=0;i<7;i++)
    {
    do
    {
    nombre=1 + rand() % (49);
    grille[nombre]=1;
    }
    while (grille[nombre]!=1);
    lot[i]=nombre;
    }
    }
    void affiche (void);
    };


    void loto::affiche (void)
    {
    int i=0;
    for (i=0;i<7;i++)
    {
    cout <<lot[i]<<"\t";

    } system("pause");
    }




    class euromillions
    {
    private:
    int grille[50];
    int etoile[9];
    int tirage[5];
    int tirage_etoile[2];
    int nombre1;
    int nombre2;
    public:
    euromillions()
    {
    int i=0;
    for (i=0;i<50;i++)
    {
    grille[i]=0;
    }
    for (i=0;i<9;i++)
    {
    etoile[i]=0;
    }
    for (i=0;i<5;i++)
    {
    do
    {
    nombre1=1+rand() %(50);
    grille[nombre1]=1;
    }
    while (grille[nombre1]!=1);
    tirage[i]=nombre1;
    }
    for (i=0;i<2;i++)
    {
    do
    {
    nombre2=1+rand()%(9);
    etoile[nombre2]=1;
    }
    while (etoile[nombre2]!=1);
    tirage_etoile[i]=nombre2;
    }
    }
    void affiche_euro (void);
    };

    void euromillions::affiche_euro (void)
    {
    int i;
    for (i=0;i<5;i++)
    {
    cout <<tirage<<"\t";
    }
    cout<<"\n";
    for (i=0;i<2;i++)
    {
    cout<<tirage_etoile<<"\t";
    }
    system("pause");
    }




    int main(int argc, char* argv[])
    { char l;
    time_t t;

    srand((unsigned) time(&t));

    do
    {
    cout << "loto 1"<<"\n";
    cout<< "euromillions 2"<<"\n";
    cin>>l;
    switch (l)
    {
    case '1' :loto a;a.affiche();break;
    case '2' :euromillions b;b.affiche_euro();break;
    default :break;
    }
    }
    while (l!=3);








    return 0;
    }
    //---------------------------------------------------------------------------

    merci !

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Et avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    loto a;
    euromillions b;
    switch (l)
    {
    case '1' :a.affiche();break;
    case '2' :b.affiche_euro();break;
    default :break;
    }
    à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch (l)
    {
    case '1' :loto a;a.affiche();break;
    case '2' :euromillions b;b.affiche_euro();break;
    default :break;
    }

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 36
    Par défaut
    Tu n'as effectivement pas de droit de déclarer une variable dans un switch de cette manière, la solution de seriousme va fonctionner, ou tu peux mettre le contenu de ton case dans un bloc{}, de cette manière, tu pourras déclarer une variable locale à ce bloc.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Tu n'as effectivement pas de droit de déclarer une variable dans un switch de cette manière
    Alors comment faut il faire la déclaration?
    Car la norme (n1905) indique pourtant:
    Declarations can appear in the substatement of a switch-statement.
    chapitre 6.4.2 point 6.

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 36
    Par défaut
    Et bien c'est étrange ça... En fait, si ta déclaration est possiblement suivie d'un break et bien le compilo ne peut pas savoir où prend fin le contexte de cette variable...

    En ajoutant un bloc de code via {} et bien tu indiques au compilo où se situe ce contexte et le problème disparaît.

    De manière symétrique, je ne pense pas que cela fonctionne en amont non plus (début du contexte ambigü pour la variable). La norme je ne la connais pas bien et je ne peux pas t'en dire plus désolé

    Si tu veux farfouiller davantage, je t'en pris, tu pourras nous en donner les résultats . En attendant, mets des accolades et tu ne seras plus ennuyé

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    503
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 503
    Par défaut
    bonsoir,

    effectivement vous avez raison il fallait que je declare me variable a l'exterieur de mon swicth

    merci encore a vos tous !

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

Discussions similaires

  1. initialisation d'une var
    Par *alexandre* dans le forum Delphi
    Réponses: 13
    Dernier message: 30/11/2006, 17h15
  2. Initialisation d'une colonne par rapport à une autre colonne
    Par jeromesco dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/04/2005, 17h15
  3. Affectation d'un champs blob dans une var de type TStrings
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/03/2005, 18h26
  4. [Initialisation] Remplir une structure une fois
    Par Kimael dans le forum Langage
    Réponses: 14
    Dernier message: 08/06/2004, 15h33
  5. [FLASH 5] Passer une var ou un paramètre
    Par Harry dans le forum Flash
    Réponses: 8
    Dernier message: 18/03/2004, 17h46

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