C# - Debutant, aide sur un petit programme [Résolu]

Signaler
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009
-
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
-
Bonjour , je suis debutant en C# et j'ai un petit probleme. Voila mon premier Code que j'ai fait, il fonctionne excepter quand je pese la touche "z", il me demande d'entrer mon chiffre plutot que de me donner les statistiques de jeux.

Quel est le probleme?

Merci d'avance a ceux qui voudront bien m'aider. ;)

---
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kash2
{
    class Program
    {
        static void Main(string[] args)
        {
            char niveau;
            int nbr_jeu_debutant, nbr_jeu_intermediaire, nbr_jeu_expert;
            int compteur = 0, compteur_essais, nbr_aleatoire, decouverte_nbr;

            nbr_jeu_debutant = 0;
            nbr_jeu_intermediaire = 0;
            nbr_jeu_expert = 0;
            compteur_essais = 0;
            decouverte_nbr = 0;
            nbr_aleatoire = 0;
            niveau = 'X';

            do
            {
                do
                {
                    Console.WriteLine("Bienvenue au Jeu Kash!");
                    Console.WriteLine("Entrez le niveau de jeu (D, I, E (Z pour terminer):");
                    niveau = char.ToLower(Convert.ToChar(Console.ReadLine()));
                    if (niveau != 'd' && niveau != 'i' && niveau != 'e' && niveau != 'z')
                        Console.WriteLine("Vous devez entrez D, I, E ou Z.....");

                    if (niveau == 'd')
                    {
                        compteur = 0;
                        Random hasard = new Random();
                        nbr_aleatoire = (hasard.Next(10) + 1);
                        nbr_jeu_debutant += 1;
                        Console.WriteLine("Niveau Débutant (entre 1 et 10)");
                    }
                    if (niveau == 'i')
                    {
                        compteur = 0;
                        Random hasard = new Random();
                        nbr_aleatoire = (hasard.Next(50) + 1);
                        nbr_jeu_intermediaire += 1;
                        Console.WriteLine("Niveau Intermédiaire (entre 1 et 50)");
                    }
                    if (niveau == 'e')
                    {
                        compteur = 0;
                        Random hasard = new Random();
                        nbr_aleatoire = (hasard.Next(100) + 1);
                        nbr_jeu_expert += 1;
                        Console.WriteLine("Niveau Expert (entre 1 et 100)");
                    }
                    do
                    {
                        Console.WriteLine("Entrez votre chiffre: ");
                        decouverte_nbr = Convert.ToInt32(Console.ReadLine());
                        if (decouverte_nbr < nbr_aleatoire)
                        {
                            compteur += 1;
                            Console.WriteLine("Trop petit !");
                        }
                        if (decouverte_nbr > nbr_aleatoire)
                        {
                            compteur += 1;
                            Console.WriteLine("Trop haut !");
                        }
                        if (decouverte_nbr == nbr_aleatoire)
                        {
                            compteur += 1;
                            compteur_essais += compteur;
                            Console.WriteLine("Bravo !!! Trouvé en {0} essais", compteur);
                        }
                    }
                    while (decouverte_nbr != nbr_aleatoire);

                }
                while (decouverte_nbr != nbr_aleatoire);
            }
            while (niveau != 'z');
            Console.WriteLine("Débutant: {0}", nbr_jeu_debutant);
            Console.WriteLine("Intermédiaire: {0}", nbr_jeu_intermediaire);
            Console.WriteLine("Expert: {0}", nbr_jeu_expert);
            Console.WriteLine("Nombre d'essais total: {0}", compteur_essais);
        }
    }
}

13 réponses

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonjour,

J'ai essayé ton code, et le fait de rentrer "E" ou "e" Fonctionne bien.

par contre il manque certains tests, et ta structure de programme peut être ameliorée.

exemple :

  static void Main(string[] args)
  {
   char niveau = 'X';   int nbr_jeu_debutant 0, nbr_jeu_intermediaire 0, nbr_jeu_expert = 0;
   int nbr_aleatoire = 0, compteur_essais=0;
                      
    Console.WriteLine("Bienvenue au Jeu Kash!");
    Console.WriteLine("Entrez le niveau de jeu (D, I, E (Z pour terminer):");
   do
   {
    try
    {
     niveau = char.ToLower(Convert.ToChar(Console.ReadLine()));
    
     Random hasard;


     switch (niveau)
     {
      case 'd':
    
       hasard = new Random();
       nbr_aleatoire = (hasard.Next(10) + 1);
       nbr_jeu_debutant += 1;
       Console.WriteLine("Niveau Débutant (entre 1 et 10)");
       compteur_essais += GetNombre(nbr_aleatoire);
       break;
      case 'i':
    
       hasard = new Random();
       nbr_aleatoire = (hasard.Next(50) + 1);
       nbr_jeu_intermediaire += 1;
       Console.WriteLine("Niveau Intermédiaire (entre 1 et 50)");
       compteur_essais += GetNombre(nbr_aleatoire);
       break;
      case 'e':
       hasard = new Random();
       nbr_aleatoire = (hasard.Next(100) + 1);
       nbr_jeu_expert += 1;
       Console.WriteLine("Niveau Expert (entre 1 et 100)");
       compteur_essais += GetNombre(nbr_aleatoire);
       break;
      case 'z':
       break;
      default:
       Console.WriteLine("Vous avez entré {0}",niveau);
       Console.WriteLine("Vous devez entrer D, I, E ou Z.....");
       break;
     }
    }
    catch
    {
       Console.WriteLine("Vous devez entrer D, I, E ou Z.....");
    }
   } while (niveau != 'z');
   Console.WriteLine("Débutant: {0}", nbr_jeu_debutant);
   Console.WriteLine("Intermédiaire: {0}", nbr_jeu_intermediaire);
   Console.WriteLine("Expert: {0}", nbr_jeu_expert);
   Console.WriteLine("Nombre d'essais total: {0}", compteur_essais);
  }
 
  static int  GetNombre(int nbr_aleatoire)
  {
   int compteur=0;
   do
   {
    Console.WriteLine("Entrez votre chiffre: ");
    try
    {
     int decouverte_nbr = Convert.ToInt32(Console.ReadLine());
     if (decouverte_nbr < nbr_aleatoire)
     {
      compteur++;
      Console.WriteLine("Trop petit !");
     }
     else if (decouverte_nbr > nbr_aleatoire)
     {
      compteur++;
      Console.WriteLine("Trop haut !");
     }
     else if (decouverte_nbr == nbr_aleatoire)
     {
      compteur++;
      Console.WriteLine("Bravo !!! Trouvé en {0} essais", compteur);
      return compteur;
     }
    }
    catch
    {
     Console.WriteLine("Entrée invalide, recommencez...");
    }
   }
   while (true);
  }

C# is amazing, enjoy it!
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Oops je realise que mon copier/coller a mal fonctionner.

Il n'y a qu'une seule bouche do...while(decouverte_nbr != nbr_aleatoire), et non deux.
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonsoir,
c'est normal que quand tu rentres 'z' il te demande le nombre, car tu es toujours dans ta boucle principale et le boucle de saisie du nombre n'est pas conditionnée.
Le test de la valeur 'z' est en sortie de boucle.

ajoute donc un test avant de demander le nombre:
   if (niveau != 'z')
   do
          {
               Console.WriteLine("Entrez votre chiffre: ");
                decouverte_nbr = Convert.ToInt32(Console.ReadLine());
               ...

C# is amazing, enjoy it!
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Merci, ca m'a l'air de fonctionner a la perfection. Je croyais que de tout simplement mettre le while (niveau != 'z') suffirais.

P.-S.: Comment je fait pour edit/delete mes messages sur le forums?
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Il me semble que j'ai un autre probleme.

J'ai ajouter le if (niveau != 'z') a la fin des autres if (d, i, e), la touche Z m'amene comme ca au statistique. Mais lorsque je pese la touche "U" par exemple qui ne represente aucun niveau pre-determiner il me dira de choisir une autre lettre et me dira tout de suite d'entrer un chiffre. Ca fait planter mon programme.
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Finalement j'ai trouver, par contre si mon Char est vide, soit une personne tape la touche <ENTER> ou <SPACE> alors encore la le program crash. Et ca me dit que c'est impossible d'avoir un Char vide dans une condition.

niveau == null, ne fonctionne pas non plus.

Voila mon nouveau code:
---

            char niveau = 'X';            int nbr_jeu_debutant 0, nbr_jeu_intermediaire 0, nbr_jeu_expert = 0;            int compteur 0, compteur_essais 0, nbr_aleatoire = 0, decouverte_nbr = 0;
                       
            do
                {
                    Console.WriteLine("Bienvenue au Jeu Kash!");
                    Console.WriteLine("Entrez le niveau de jeu (D, I, E (Z pour terminer):");
                    niveau = char.ToLower(Convert.ToChar(Console.ReadLine()));
                    if (niveau != 'd' && niveau != 'i' && niveau != 'e' && niveau != 'z')
                        Console.WriteLine("Vous devez entrez D, I, E ou Z.....");

                    if (niveau == 'd')
                    {
                        compteur = 0;
                        Random hasard = new Random();
                        nbr_aleatoire = (hasard.Next(10) + 1);
                        nbr_jeu_debutant += 1;
                        Console.WriteLine("Niveau Débutant (entre 1 et 10)");
                    }
                    if (niveau == 'i')
                    {
                        compteur = 0;
                        Random hasard = new Random();
                        nbr_aleatoire = (hasard.Next(50) + 1);
                        nbr_jeu_intermediaire += 1;
                        Console.WriteLine("Niveau Intermédiaire (entre 1 et 50)");
                    }
                    if (niveau == 'e')
                    {
                        compteur = 0;
                        Random hasard = new Random();
                        nbr_aleatoire = (hasard.Next(100) + 1);
                        nbr_jeu_expert += 1;
                        Console.WriteLine("Niveau Expert (entre 1 et 100)");
                    }                    if (niveau 'd' || niveau 'i' || niveau == 'e')
                        do
                        {
                            Console.WriteLine("Entrez votre chiffre: ");
                            decouverte_nbr = Convert.ToInt32(Console.ReadLine());
                            if (decouverte_nbr < nbr_aleatoire)
                            {
                                compteur += 1;
                                Console.WriteLine("Trop petit !");
                            }
                            if (decouverte_nbr > nbr_aleatoire)
                            {
                                compteur += 1;
                                Console.WriteLine("Trop haut !");
                            }
                            if (decouverte_nbr == nbr_aleatoire)
                            {
                                compteur += 1;
                                compteur_essais += compteur;
                                Console.WriteLine("Bravo !!! Trouvé en {0} essais", compteur);
                            }
                        }
                        while (decouverte_nbr != nbr_aleatoire);
                }
            while (niveau != 'z');
            Console.WriteLine("Débutant: {0}", nbr_jeu_debutant);
            Console.WriteLine("Intermédiaire: {0}", nbr_jeu_intermediaire);
            Console.WriteLine("Expert: {0}", nbr_jeu_expert);
            Console.WriteLine("Nombre d'essais total: {0}", compteur_essais);
 
    }
    }
}
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Desole si je me repond a moi meme(c'est que je ne suis pas capable d'EDIT mes post. :( Et on sais jamais ca peut peut-etre servir a quelqu'un.

Bon finalement pour ce qui est d'un choix vide(Enter, Space par exemple) jai tout simplement remplacer mon Char niveau par un string niveau et rajouter la condition (niveau == "") comme ceci:

if (niveau != "d" && niveau != "i" && niveau != "e" && niveau != "z" || niveau == "")

par contre si on entre "E" au lieu de "e" il ne reconnais pas la UpperCase et j'ai chercher comment convertir le String en LowerCase peu importe ce qui arrive dans le Readline() mais sans succes.
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Re,

Concerant les tests de sortie de boucle,
while (niveau != 'z');
permet de sortir de la boucle si niveau='z', mais cela n'empêche par la boucle de s'effectuer.
un While est une boucle tant-que, donc elle s'execute tant-que (niveau != 'z') mais comme le test est effectué en fin de boucle ...

C# is amazing, enjoy it!
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Merci Robert33. ;)
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Comment je fait pour delete/edit mes messages?
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonjour,
Je ne comprends pas ta question, peux-tu être plus clair?

C# is amazing, enjoy it!
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

En fait ma question n'a pas de lien avec la programmation mais plus avec les fonctionalite du forum.

Je suis incapable d'Editer ou de Supprimer mes propres messages.

Si j'aimerais modifier une informations dans mes messages poster de facon prematurer alors il m'est impossible de le faire.

Impossible dans le sens que je ne trouve pas comment.(Je voie aucun bouton pour ca). :\
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
29
Bonsoir,

Non c'est réelemnt impossible.
faut faire gaffe avant d'envoyer ;-)

C# is amazing, enjoy it!