C# - Debutant, aide sur un petit programme

Résolu
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009 - 30 avril 2009 à 09:23
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 28 mai 2009 à 20:35
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

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
1 mai 2009 à 12:37
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!
3
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
30 avril 2009 à 09:29
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.
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
30 avril 2009 à 18: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!
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
30 avril 2009 à 20:09
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
30 avril 2009 à 20:31
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.
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
30 avril 2009 à 20:59
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);
 
    }
    }
}
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
30 avril 2009 à 21:39
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.
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
1 mai 2009 à 12:40
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!
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
1 mai 2009 à 22:10
Merci Robert33. ;)
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
24 mai 2009 à 21:59
Comment je fait pour delete/edit mes messages?
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
26 mai 2009 à 08:12
Bonjour,
Je ne comprends pas ta question, peux-tu être plus clair?

C# is amazing, enjoy it!
0
CodeIX Messages postés 60 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 28 novembre 2009
26 mai 2009 à 09:07
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). :\
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 mai 2009 à 20:35
Bonsoir,

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

C# is amazing, enjoy it!
0
Rejoignez-nous