Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[C#]Problème de type de variable
Auteur Message
Répondre en citant
Message [C#]Problème de type de variable 
Bonjour,
je suis en train de travailler sur une commande externe en C#.Elle permet de remplacer la saisie par des étoiles (pour récupérer la saisie,une simple boule for est utilisée).
Mon problème est le suivant.Je viens d'apprendre aujourd'hui ce C# et je galère.Voici les erreurs :
    Ligne 17 : impossible d'ajouter 2 varables de type différentes+"utilisation d'une variable non assignée 'chaine'"<selon le compilateur
    ligne 22 :problème : la variable est locale,je ne peux pas l'utiliser (enfin,d'après ce que j'ai appris,le compilateur ne m'a rien dit.

Je voudrais savoir s'il y a une solution pour corriger au mieux ce code
code source :
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            while (1 == 1) //::boucle Infinie
            {
                string chaine;
                ConsoleKeyInfo test = Console.ReadKey(true);
                chaine += test.Key; //::Problème : impossible d'ajouter 2 varables de type différentes
                Console.Write("*");
                if (test.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine(chaine);//::problème : la vaiable est locale,je ne paux pas l'utiliser
                    break
                }

            }
        }
    }
}

Merci!




______________________________________________________
LT-S Batch explorer :Un explorateur en Batch
ConsoleINI : utilisez des fichiers INI dans vos Batch
Epileptic : un mini jeu de rapidité
Faites parler votre téléphone avec mon app android
Mon site pour voir tout mes autres programmes
Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [C#]Problème de type de variable 
Bonjour.

Citation:
Ligne 17 : impossible d'ajouter 2 varables de type différentes
En théorie, ce n'est pas une erreur mais un avertissement.
"string" est un type où tu peut additionner des données, ces données sont converties en texte avec Object.ToString.
ConsoleKeyInfo.Key est une variable de type ConsoleKey, un type enum (enumération) (parmis struct, class et enum).
Lorsque que l'on convertis ConsoleKey en texte, on obtient la valeur de l'énumération en texte, par exemple :
- "Enter" pour Entrer, "NumPad0" pour 0, etc.
Cela peut donner des étrangetés comme : "NumPad0NumPad4NumPad9DEFD".
La solution est d'utiliser le caractère direct avec ConsoleKey.KeyChar, un char, un simple caractère.

Citation:
utilisation d'une variable non assignée 'chaine'"<selon le compilateur
"non assigné" veut dire sans valeur, en C#, les chaines de caractère doivent avoir une valeur pour être utilisées, sinon, leur valeur est "null".
Par exemple :
Code:
[lang=csharp]string chaine = "";
chaine sera vide et pourra être utilisé.

Ce n'est pas le cas partout, par exemple, un type struct (quelques primitives + autres types) n'est pas concerné car il ne peut pas être "null".

Citation:
ligne 22 :problème : la variable est locale,je ne peux pas l'utiliser (enfin,d'après ce que j'ai appris,le compilateur ne m'a rien dit.
Voir au dessus.

Attention, tu réinitialise ta chaine de caractère à chaque début de boucle, sinon, chaine sera toujours vide.
Place bien
Code:
[lang=csharp]string chaine = "";
avant ta boucle while.

Code:
[lang=csharp]while (1 == 1)
Peut être remplacé par
Code:
[lang=csharp]while (true)


Voila au final une version corrigée :
Code:
[lang=csharp]using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string chaine = "";

            while (true)
            {
                ConsoleKeyInfo test = Console.ReadKey(true);
                if (test.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine(chaine);
                    break;
                }

                // J'ai déplacé cette partie là sinon, chaine contiendera le caractère correspondant à [Entrer].
                chaine += test.KeyChar;
                Console.Write('*');
            }
        }
    }
}


Voila une version optimisée (et améliorée) :
Code:
[lang=csharp]using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new StringBuilder();
            var test = new ConsoleKeyInfo();

            while (test.Key != ConsoleKey.Enter)
            {
                builder.Append(test.KeyChar);
                Console.Write(char.IsControl(test.KeyChar) ? "" : "*");
                test = Console.ReadKey(true);
            }

            Console.WriteLine(builder.ToString());
            builder.Clear();
        }
    }
}





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#]Problème de type de variable 
TSnake41 a écrit:

Voila une version optimisée (et améliorée) :
Code:
[lang=csharp]using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new StringBuilder();
            var test = new ConsoleKeyInfo();

            while (test.Key != ConsoleKey.Enter)
            {
                builder.Append(test.KeyChar);
                Console.Write(char.IsControl(test.KeyChar) ? "" : "*");
                test = Console.ReadKey(true);
            }

            Console.WriteLine(builder.ToString());
            builder.Clear();
        }
    }
}

Bonjour,
J'ai un peu compris les erreurs et le second code est bien focntionnel.
Mais je voudrais savoir comment s'y prendre pour supprimer un caractère avec la touche [backspace].




______________________________________________________
LT-S Batch explorer :Un explorateur en Batch
ConsoleINI : utilisez des fichiers INI dans vos Batch
Epileptic : un mini jeu de rapidité
Faites parler votre téléphone avec mon app android
Mon site pour voir tout mes autres programmes
Visiter le site web du posteur Skype
Répondre en citant
Message [C#]Problème de type de variable 
logan T a écrit:
TSnake41 a écrit:

Voila une version optimisée (et améliorée) :
Code:
[lang=csharp]using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new StringBuilder();
            var test = new ConsoleKeyInfo();

            while (test.Key != ConsoleKey.Enter)
            {
                builder.Append(test.KeyChar);
                Console.Write(char.IsControl(test.KeyChar) ? "" : "*");
                test = Console.ReadKey(true);
            }

            Console.WriteLine(builder.ToString());
            builder.Clear();
        }
    }
}

Bonjour,
J'ai un peu compris les erreurs et le second code est bien focntionnel.
Mais je voudrais savoir comment s'y prendre pour supprimer un caractère avec la touche [backspace].

Si tu as ta chaine dans un "string :
"Tu peux utiliser string.Substring(int,int) ou string.Remove(int)

Code:
[lang=csharp]chaine.Substring(0, chaine.Length - 1);
chaine.Remove(Length - 1);


Sinon, avec StringBuilder :
Code:
[lang=csharp]builder.Remove(builder.Length - 1, 1);





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [C#]Problème de type de variable 
TSnake41 a écrit:
logan T a écrit:
TSnake41 a écrit:

Voila une version optimisée (et améliorée) :
Code:
[lang=csharp]using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var builder = new StringBuilder();
            var test = new ConsoleKeyInfo();

            while (test.Key != ConsoleKey.Enter)
            {
                builder.Append(test.KeyChar);
                Console.Write(char.IsControl(test.KeyChar) ? "" : "*");
                test = Console.ReadKey(true);
            }

            Console.WriteLine(builder.ToString());
            builder.Clear();
        }
    }
}

Bonjour,
J'ai un peu compris les erreurs et le second code est bien focntionnel.
Mais je voudrais savoir comment s'y prendre pour supprimer un caractère avec la touche [backspace].

Si tu as ta chaine dans un "string :
"Tu peux utiliser string.Substring(int,int) ou string.Remove(int)

Code:
[lang=csharp]chaine.Substring(0, chaine.Length - 1);
chaine.Remove(Length - 1);


Sinon, avec StringBuilder :
Code:
[lang=csharp]builder.Remove(builder.Length - 1, 1);

Bonjour,
Comment ducoup supprimer une étoile avec ?




______________________________________________________
LT-S Batch explorer :Un explorateur en Batch
ConsoleINI : utilisez des fichiers INI dans vos Batch
Epileptic : un mini jeu de rapidité
Faites parler votre téléphone avec mon app android
Mon site pour voir tout mes autres programmes
Visiter le site web du posteur Skype
Message [C#]Problème de type de variable 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch