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 :

Portée des variables [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Portée des variables
    J'ai fait l'exercice suivant :

    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
     
            static void Main(string[] args)
            {
     
                string[] parameters; 
                string sTypeDeCalcul;
     
                if (args.Length  == 0)
                    Console.Write("passez un paramètre");
                else
                {
                    parameters = Environment.GetCommandLineArgs();
     
                    sTypeDeCalcul = parameters[1];
     
                    switch (sTypeDeCalcul)
                    {
                        case "somme":
                            if (parameters.Length  != 4)
                                Console.WriteLine("vous ne pouvez faire la somme que de deux nombres \n");
                            else
                            {
                                int value1 = int.Parse(parameters[2]);
                                int value2 = int.Parse(parameters[3]);
                                int resultat = value1 + value2;
                                Console.WriteLine("La somme de " + value1 + " et de " + value2 + " est : " + resultat );
                            }break;
                        case "multiplication":
                            if (parameters.Length != 4)
                                Console.WriteLine("vous ne pouvez faire la somme que de deux nombres");
                            else
                            {
                                int value1 = int.Parse(parameters[2]);
                                int value2 = int.Parse(parameters[3]);
                                int resultat = value1 * value2;
                                Console.WriteLine ("le Résultat de la multiplication de " + value1 + " et de " + value2 + " est " + resultat );
                            }break;
                        case "moyenne":
                            List<int> values= new List<int>();
                            int resultat = 0;
                            for (int i = 2; i < parameters.Length ; i++)
                            {
                                values.Add (int.Parse(parameters[i]));
                            }
                            foreach (int value in values)
                            {
                                resultat += value;
                            }
                            resultat /= values.Count ;
                            break;
                        default:
                            Console.WriteLine("Veuillez utiliser les variable somme, multiplication ou moyenne");
                            break;
     
                    }
                }
     
            }
    J'ai l'erreur suivante au niveau de la déclaration de la variable resultat dansl e case "moyenne" : Erreur 1 Une variable locale nommée 'resultat' ne peut pas être déclarée dans cette portée, car elle modifierait la signification de 'resultat', déjà utilisée dans une portée 'enfant' pour désigner autre chose.

    Je sais qu'en simplement renommant ma variable resultatsomme je n'aurai plus le problème.

    Mais j'aimerais connaitre la raison de cette erreur.

    Je comprend bien que la définition des variables résultats précédent sont dans dans des sous condition if de la condition case.
    Mais étant donné que chaque case reçoit un break, il n'y a aucune possibilité que la variable résultat soit utilisée plusieurs fois.
    De plus vu la portée des variable, celle-ci est "clean" à chaque break de chaque case non ?

    Merci pour vos explications.

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Yep,

    je pense que c'est surtout le fait que la portée de ta variable porte sur l'ensemble de la fonction et non pas sur le (ou les) case du switch.

    Je visualise bien le concept de la portée des variables, mais au niveau d'une classe ou d'une fonction. Je ne pense pas que ce concept s'applique au cas d'un switch et de son contenu (en tout cas je n'ai jamais lu cela).
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En principe une variable s'applique entre les accolades ({ et }) dans lesquelles elle est déclarée, les accolades définissant un bloc de code.

    Donc ici, si tu regardes bien, tous les cases sont entre les mêmes accolades, ce qui signifie que tu déclares plusieurs fois ta variable resultat dans le même bloc de code. Ce ne sont pas les case qui déterminent un bloc de code...

    Il faut donc déclarer resultat une seule fois, en-dehors du switch.

    [EDIT] : Il me semble que tu peux aussi inclure un bloc de code au sein d'un case :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch (toto)
    {
        case "A":
            {
                int resultat = 0;
            }
            break;
        case "B":
            {
                int resultat = 1;
            }
            break;
    }
    A tester mais je crois que ça fonctionne.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Pour le bloc de code effectivement c'est ok avec les accolades, j'ai un projet avec cela dedans justement sous les yeux ;-).

    Sinon pour les {} du switch bien vu je remontais à celle de la fonction moi...
    Un mauvais point pour moi
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En fait, dans un switch, les instructions d'un case sont toutes dans le même "scope": tu ne peux donc pas déclarer deux variables avec le même nom dans 2 cases différents... à moins de mettre ces instructions dans un nouveau bloc (entre accolades), pour les isoler.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos réponses.
    Je comprend mieux maintenant.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  2. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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