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 :

Problème dans le code [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Par défaut Problème dans le code
    Bonjour à tous !

    Tout d'abord, je cherche quelqu'un qui voudrait bien m'aider dans mon apprentissage de ce langage en me passant son adresse mail ou Skype. Comme ça, au lieu d'infester le forum de mes sujets dès que j'ai un problème, je poserai ma question à cette personne. :$

    Donc voilà ! Je rencontre un problème dans mon code...
    J'effectuele troisième TP d'un tutoriel C# .
    Vous le remarquez dans mon code, je rajoute des choses, mais c'est justement pour m'entrainer... Mais même en regardant la correction, je ne comprends pas ce qu'il fait...

    Donc mon code ressemble à ça :
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Jeu_Plus_ou_moins
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("\t\t\t*****************");
                Console.WriteLine("\t\t\t* Plus ou moins *");
                Console.WriteLine("\t\t\t*****************\n");
     
                int nombreAleatoire = new Random().Next(-100, 100);  //Déclaration du nombre aléatoire
                int nombreSaisi = 0;
                int nombreDEssai = 0;
                bool testSaisie = false;
     
                Console.WriteLine("Devinez le nombre entier qui estcompris entre -100 et 100 (exclu)");
                string saisie = Console.ReadLine(); //Demande du nombre à deviner
                nombreDEssai++; //Ajout au nombre d'essai
     
                while (!testSaisie)
                {
                    if (int.TryParse(saisie, out nombreSaisi)) //On vérifie si la saisie est correcte
                    {
                        testSaisie = true;
                    }
     
                    else
                    {
                        testSaisie = false;
                    }
                }
     
                while (testSaisie == true) //Si la saisie est correcte
                {
                    while (nombreSaisi != nombreAleatoire) //Tant que le nombre est faux
                    {
                        if (nombreSaisi < nombreAleatoire) //S'il est plus petit
                        {
                            Console.WriteLine("C'est plus !");
                            saisie = Console.ReadLine();
                            nombreDEssai++;
                        }
     
                        else if (nombreSaisi > nombreAleatoire) //S'il est plus grand
                        {
                            Console.WriteLine("C'est moins !");
                            saisie = Console.ReadLine();
                            nombreDEssai++;
                        }
     
                        else //S'il est enfin correct
                        {
                            if (nombreDEssai <= 5) //Si on trouve en moins de 5 essais
                            {
                                Console.WriteLine("Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + nombreDEssai + " essais. Tres bien joue !");
                            }
     
                            else if ((nombreDEssai > 5) && (nombreDEssai <= 10)) //Si on trouve en moins de 10 essais
                            {
                                Console.WriteLine("Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + nombreDEssai + " essais. Bien joue !");
                            }
     
                            else //Si on trouve en plus de 10 essais
                            {
                                Console.WriteLine("Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + nombreDEssai + " essais. C'est pas super...");
                            }
     
                            Console.ReadLine();
                        }
                    }
     
                    if (nombreSaisi == nombreAleatoire) //Si c'est juste dès le début
                    {
                        nombreDEssai++;
                        Console.WriteLine("Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + nombreDEssai + " essai. Vous êtes un genie !");
                        Console.ReadLine();
                    }
                }
     
                while (testSaisie == false) //Si la saisie est incorrecte
                {
                    Console.WriteLine("Votre saisie est fausse. Reessayez...");
                    saisie = Console.ReadLine();
                    nombreDEssai++;
                }
            }
        }
    }
    Et lorsque j'exécute, ça m'affiche ça dans la console.

    J'arrive à créer le programme, mais sans vérifier la saisie...

    Merci d'avance pour votre aide !
    En espérant trouver quelqu'un pour m'aider par mail...

    Veriditas !

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2003
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 274
    Par défaut
    Salut,

    Tu as plusieurs erreurs dans ton code.
    La première c'est que ton dernier while ne sera jamais atteint.
    La deuxième est que tu ne récupères pas tes nombres saisis dans la console et donc à chaque essais on boucle dans tes while !
    Les imbrications ne sont pas correctes.
    Bref, j'ai tout changé et voici le résultat :

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    using System;
     
    namespace Jeu_Plus_ou_moins
    {
    	class Program
    	{
    		static int _nombreDEssai;
    		static string _saisie;
    		static int _nombreSaisi;
     
    		static void Main(string[] args)
    		{
    			int nombreAleatoire = new Random().Next(-100, 100);  //Déclaration du nombre aléatoire
    			bool endGame = false;
     
    			Console.WriteLine("\t\t\t*****************");
    			Console.WriteLine("\t\t\t* Plus ou moins *");
    			Console.WriteLine("\t\t\t*****************\n");
    			Console.WriteLine("Devinez le nombre entier qui estcompris entre -100 et 100.");
     
    			while (endGame == false)
    			{
    				while (_nombreSaisi != nombreAleatoire) //Tant que le nombre est faux
    				{
    					AskValueToUser();
     
    					if (_nombreSaisi < nombreAleatoire) //S'il est plus petit
    					{
    						Console.WriteLine("C'est plus !");
    					}
    					else if (_nombreSaisi > nombreAleatoire) //S'il est plus grand
    					{
    						Console.WriteLine("C'est moins !");
    					}
    				}
     
    				//S'il est enfin correct
    				string endPhrase = "Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + _nombreDEssai + " essais. ";
    				if (_nombreDEssai == 1) //Si c'est juste dès le début
    				{
    					Console.WriteLine(endPhrase + "Vous êtes un genie !");
    				}
    				else if (_nombreDEssai <= 5) //Si on trouve en moins de 5 essais
    				{
    					Console.WriteLine(endPhrase + " Tres bien joue !");
    				}
    				else if ((_nombreDEssai > 5) && (_nombreDEssai <= 10)) //Si on trouve en moins de 10 essais
    				{
    					Console.WriteLine(endPhrase + "Bien joue !");
    				}
     
    				else //Si on trouve en plus de 10 essais
    				{
    					Console.WriteLine(endPhrase + "C'est pas super...");
    				}
     
    				// On arrête la boucle while.
    				endGame = true;
    			}
     
    			Console.ReadLine();
    		}
     
    		/// <summary>
    		/// Demande une valeur à l'utilisateur.
    		/// </summary>
    		private static void AskValueToUser()
    		{
    			_saisie = Console.ReadLine();
     
    			while (CheckEncodedValue() == false)
    			{
    				_saisie = Console.ReadLine();
    			}
     
    			_nombreDEssai++; //Ajout au nombre d'essai
    		}
     
    		/// <summary>
    		/// Vérifie si la valeur encodée par l'utilisateur peut être un nombre int.
    		/// </summary>
    		/// <returns>True si la valeur est un nombre.</returns>
    		private static bool CheckEncodedValue()
    		{
    			bool result;
    			// Le ConvertTo peut lever une erreur de type FormatException ou OverflowException.
    			// Je rajoute donc la gestion de ces erreurs.
    			try
    			{
    				_nombreSaisi = Convert.ToInt32(_saisie);
    				result = true;
    			}
    			catch (FormatException e)
    			{
    				Console.WriteLine("Désolé mais vous n'avez pas entré un nombre.");
    				result = false;
    			}
    			catch (OverflowException e)
    			{
    				Console.WriteLine("Vous avez écris un nombre trop grand.");
    				result = false;
    			}
     
    			return result;
    		}
    	}
    }
    Autre erreur c'est que ton nombre aléatoire sera compris entre -100 et 100 inclus !!! si tu ne les veux pas alors tu dois mettre les valeurs -99 et 99.
    Le TryParse ne permet pas d'avoir les nombres négatifs et il faut passer par le ConvertTo, voilà pourquoi j'ai créé la fonction.

    Pour te former regarde ces cours et tutoriels C#.

  3. #3
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Par défaut
    Le TryParse ne prend pas les négatifs ? Pourtant dans un autre programme que j'ai fait où il fait la moyenne, si je mets un négatif, ça marche très bien !

    Ensuite, je n'ai donc pas saisi ça façon de demander la saisie. En fait, moi au début, avant d'avoir étudier ce chapitre, je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable = int.Parse(Console.ReadLine())
    Ca marchait très bien, mais si l'utilisateur saisissait autre chose qu'un entier, l'application crashé. Il faut donc vérifier la saisie à l'aide de TryParse. Mais dans le chapitre dédier à cette fonction, le site mets une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while (!ageIsValid)
    {
        Console.WriteLine("Veuillez saisir votre age");
        string saisie = Console.ReadLine();
        if (int.TryParse(saisie, out age))
            ageIsValid = true;
        else
        {
            ageIsValid = false;
            Console.WriteLine("L'age que vous avez saisi est incorrect ...");
        }
    }
    La boucle veut dire que "tant que l'âge saisi est faux, on recommence". Et si en rentrant dans la boucle, on peut convertir la saisie en entier, c'est juste, sinon, on annonce que la saisie est incorrecte je me trompe ? Donc pour vérifier si la saisie est bien un entier, on est obligé d'avoir ce 'while' ou non ?

    Comment ça je ne récupère pas la saisie ? permet de récupérer une saisie non ? C'est ce qui est montré je me trompe ?

    Qu'est-ce que les "imbrications" ?

    J'ai mis -100 et 100 exclus parce que sur le site, il annonce au début du TP que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nombreAleatoire = new Random().Next(0, 100);
    crée un nombre aléatoire compris entre 0 et 100 exclu, c'est faux ?

    Voilà, beaucoup de questions et d'incompréhensions... Pour le code que tu m'as proposé, je regarderai un peu plus tard, après avoir réessayez de le coder à ma façon ! Ah, si ! J'ai jeté un léger coup d'œil sur ce que tu as fait, et j'ai vu que tu avais créé une méthode (j'espère que je ne confonds pas méthode et fonction ) qui demande une saisie et vérifie la saisie, et fait appel à cette méthode quand tu en as besoin et je trouve que c'est une très bonne idée que je vais te piquer

    Merci pour votre patience en tout cas !

    Je vous tiens au courant,

    Veriditas !

  4. #4
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Par défaut
    J'ai refait mon code et.... MEME PROBLEME...
    Quel est l'erreur ici ?

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Jeu_Plus_ou_moins
    {
        class Program
        {
            static int nombreAleatoire = new Random().Next(-100, 100); //Déclaration du nombre aléatoire
            static string saisie;
            static int nombreDEssai = 0;
            static int nombreSaisi = 0;
            static bool testSaisie = false;
     
            static void DemandeValeur() //Méthode pour demander une valeur
            {
     
                saisie = Console.ReadLine();
                nombreDEssai++;
     
                while (!testSaisie) //Tant que la saisie est fausse
                {
     
                    if (int.TryParse(saisie, out nombreSaisi)) //Quand elle est bonne
                    {
                        testSaisie = true;
                    }
     
                    else //Quand ele est fausse
                    {
                        testSaisie = false;
                        Console.WriteLine("Vous avez rentre une valeur fausse. Reessayez...");
                    }
                }
            }
     
            static void Main(string[] args)
            {
                string phraseFin = "Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + nombreDEssai + " essais.";
     
                Console.WriteLine("\t\t\t*****************");
                Console.WriteLine("\t\t\t* Plus ou moins *");
                Console.WriteLine("\t\t\t*****************\n");
                Console.WriteLine("Devinez le nombre mytère qui est un entier compris entre -100 et 100.");
     
                DemandeValeur(); //On demande la valeur
     
                if (nombreSaisi == nombreAleatoire) //Si on trouve du premier coup
                {
                    Console.WriteLine("Vous avez trouve le nombre mystere " + nombreAleatoire + " en 1 essai. Vous êtes un génie !");
                }
     
                while (nombreSaisi != nombreAleatoire) //Tant que c'est faux
                {
                    if (nombreSaisi < nombreAleatoire) //Si c'est plus
                    {
                        Console.WriteLine("C'est plus ! Reessayez...");
                        DemandeValeur();
                    }
     
                    else if (nombreSaisi > nombreAleatoire) //Si c'est moins
                    {
                        Console.WriteLine("C'est moins ! Reessayez...");
                        DemandeValeur();
                    }
     
                    else //Si on trouve enfin
                    {
                        if (nombreDEssai <= 5) //Si c'est trouvé en moins de 5 essais
                        {
                            Console.WriteLine(phraseFin + "Tres bien !");
                        }
     
                        else if ((nombreDEssai > 5) && (nombreDEssai <= 10)) //Si c'est trouvé en moin de 10 essais
                        {
                            Console.WriteLine(phraseFin + "Bien joue !");
                        }
     
                        else //Si c'est trouvé en plus de 10 essais
                        {
                            Console.WriteLine(phraseFin + "C'est pas mal...");
                        }
                    }                    
                }
            }
        }
    }

  5. #5
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    code corrigé
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace Jeu_Plus_ou_moins
    {
        class Program
        {
            static int nombreAleatoire = new Random().Next(-100, 100); //Déclaration du nombre aléatoire
            static string saisie;
            static int nombreDEssai = 0;
            static int nombreSaisi = 0;
            static bool testSaisie = false;
     
            static void DemandeValeur() //Méthode pour demander une valeur
            {
                testSaisie = false;
                //saisie = Console.ReadLine();
                nombreDEssai++;
     
                while (!testSaisie) //Tant que la saisie est fausse
                {
                    saisie = Console.ReadLine();
                    if (int.TryParse(saisie, out nombreSaisi)) //Quand elle est bonne
                    {
                        testSaisie = true;
                    }
     
                    else //Quand ele est fausse
                    {
                        testSaisie = false;
                        Console.WriteLine("Vous avez rentre une valeur fausse. Reessayez...");
                    }
                }
            }
     
            static void Main(string[] args)
            {
                string phraseFin = "Vous avez trouve le nombre mystere " + nombreAleatoire + " en " + nombreDEssai + " essais.";
     
                Console.WriteLine("\t\t\t*****************");
                Console.WriteLine("\t\t\t* Plus ou moins *");
                Console.WriteLine("\t\t\t*****************\n");
                Console.WriteLine("Devinez le nombre mytère qui est un entier compris entre -100 et 100.");
     
                DemandeValeur(); //On demande la valeur
     
                if (nombreSaisi == nombreAleatoire) //Si on trouve du premier coup
                {
                    Console.WriteLine("Vous avez trouve le nombre mystere " + nombreAleatoire + " en 1 essai. Vous êtes un génie !");
                }
     
                while (nombreSaisi != nombreAleatoire) //Tant que c'est faux
                {
                    if (nombreSaisi < nombreAleatoire) //Si c'est plus
                    {
                        Console.WriteLine("C'est plus ! Reessayez...");
                        DemandeValeur();
                    }
     
                    else if (nombreSaisi > nombreAleatoire) //Si c'est moins
                    {
                        Console.WriteLine("C'est moins ! Reessayez...");
                        DemandeValeur();
                    }
     
     
                }
                     if (nombreDEssai <= 5) //Si c'est trouvé en moins de 5 essais
                        {
                            Console.WriteLine(phraseFin + "Tres bien !");
     
                        }
     
                        else if ((nombreDEssai > 5) && (nombreDEssai <= 10)) //Si c'est trouvé en moin de 10 essais
                        {
                            Console.WriteLine(phraseFin + "Bien joue !");
                        }
     
                        else //Si c'est trouvé en plus de 10 essais
                        {
                            Console.WriteLine(phraseFin + "C'est pas mal...");
                        }
                     Console.Read();
            }
        }
    }

  6. #6
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 10
    Par défaut
    Super merci ! J'ai plus ce problème, et en plus, j'ai compris mon erreur !

    Par contre, a la fin, quand je "trouve enfin", ben, ça m'affiche rien...

    Edit : Ok, j'ai vu la dernière chose à corriger !

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

Discussions similaires

  1. Problème dans un code delphi dans C++Builder
    Par gandf dans le forum C++Builder
    Réponses: 8
    Dernier message: 23/03/2007, 23h12
  2. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  3. Problème dans le code?
    Par Arch Enemy dans le forum C
    Réponses: 5
    Dernier message: 15/08/2006, 11h05
  4. [MySQL] Un problème dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/07/2006, 11h06
  5. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09

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