2009-06-14 12 views
1

Bonjour, Je pratique le "Switch Loop" dans un programme. Et je crée un code où un utilisateur peut entrer l'entier et après que l'utilisateur aura entré l'entier, il affichera aussi ce que l'utilisateur vient de taper. Maintenant, j'essaie d'implémenter où le programme demandera à l'utilisateur d'entrer le numéro à nouveau en sélectionnant le Y/N. Je l'ai déjà inclus ici dans mon code mais si je tape des caractères la première fois que le programme me demande de taper un entier, le programme exécutera la partie catch. Comment puis-je faire que si l'utilisateur va taper un caractère, il affichera à nouveau le message, "s'il vous plaît entrer l'entier:"instruction switch

Merci pour votre aide, je suis perdu dans quelque part ici.

  int enterYourNumber; 
      char shortLetter; 

      try 
      { 
       Console.WriteLine("Please enter the integer: "); 
       enterYourNumber = Convert.ToInt32(Console.ReadLine()); 
       WriteNumber(enterYourNumber); 

       Console.WriteLine("Do you still want to enter a number? Y/N"); 
       shortLetter = Convert.ToChar(Console.ReadLine()); 

       while (shortLetter == 'y' || shortLetter == 'Y') 
       { 
        Console.WriteLine("Please enter the integer: "); 
        enterYourNumber = Convert.ToInt32(Console.ReadLine()); 
        WriteNumber(enterYourNumber); 

        Console.WriteLine("Do you still want to enter a number? Y/N"); 
        shortLetter = Convert.ToChar(Console.ReadLine()); 
       } 

      } 
      catch 
      {           
       Console.WriteLine("Please enter an integer not a character"); 
      } 
     } 

      public static void WriteNumber(int wordValue) 
      { 

      switch (wordValue) 
      { 
       case 1: 
        Console.WriteLine("You have entered number one"); 
        break; 
       case 2: 
        Console.WriteLine("You have entered number two"); 
        break; 
       case 3: 
        Console.WriteLine("You have entered number three"); 
        break; 
       default: 
        Console.WriteLine("You have exceeded the range of number 1-3 "); 
        break; 
      } 

======================

C'est ce que je l'ai fait, je ne sais pas pourquoi je reçois une erreur . La nouvelle méthode ne semble pas fonctionner:

 int enterYourNumber; 
     char shortLetter; 


      do 
     { 
      enterYourNumber = GetNumber(); 
      WriteNumber(enterYourNumber);     
      Console.WriteLine("Do you still want to enter a number? Y/N"); 
      shortLetter = Convert.ToChar(Console.ReadLine()); 
     } 
     while (shortLetter == 'y' || shortLetter == 'Y') 
     { 
      Console.WriteLine("Please enter the integer: "); 
      enterYourNumber = Convert.ToInt32(Console.ReadLine()); 
      WriteNumber(enterYourNumber); 

      Console.WriteLine("Do you still want to enter a number? Y/N"); 
      shortLetter = Convert.ToChar(Console.ReadLine()); 
     } 
    } 



     public static int GetNumber() 
     { 
     bool done = false; 
     int value; 
     while (!done) 
     { 
      Console.WriteLine("Please enter the integer: "); 
     try 
     { 
      value = Convert.ToInt32(Console.ReadLine()); 
      done = true; 
     } 
     catch 
     { 
      Console.WriteLine("Please enter an integer not a character"); 
     } 
     } 
     } 

=============

Salut Bill est ce que vous avez donné l'exemple et il semble que je suis toujours obtenir une erreur : pourriez-vous s'il vous plaît le code. Merci beaucoup:

public static void Main(string[] args) 
    { 
     int enterYourNumber; 
     char shortLetter; 



     do 
     { 
      enteryourNumber = GetNumber(); 
      WriteNumber(enteryourNumber); 
      Console.WriteLine("Do you still want to enter a number? Y/N"); 
      shortLetter = Convert.ToChar(Console.ReadLine()); 
     } 
     while (shortLetter == 'y' || shortLetter == 'Y'); 
    } 


    public static int GetNumber() 
    { 
     bool done = false; 
     int value; 
     while (!done) 
     { 
      Console.WriteLine("Please enter the integer: "); 
      try 
      { 
       value = Convert.ToInt32(Console.ReadLine()); 
       done = true; 
      } 
      catch 
      { 
       Console.WriteLine("Please enter an integer not a character"); 
      } 

      Console.WriteLine("Please enter the integer: "); 
      enterYourNumber = Convert.ToInt32(Console.ReadLine()); 
      WriteNumber(enterYourNumber); 
      Console.WriteLine("Do you still want to enter a number? Y/N"); 
      shortLetter = Convert.ToChar(Console.ReadLine()); 
     } 
    } 

    public static void WriteNumber(int wordValue) 
    { 

     switch (wordValue) 
     { 
      case 1: 
       Console.WriteLine("You have entered number one"); 
       break; 

      case 2: 
       Console.WriteLine("You have entered number two"); 
       break; 

      case 3: 
       Console.WriteLine("You have entered number three"); 
       break; 

      default: 
       Console.WriteLine("You have exceeded the range of number 1-3 "); 
       break; 
     } 
    } 
} 

}

=================

Salut à nouveau cette question est pour Robert. C'est ce que j'ai fait maintenant, mais si j'entre "N", il ne quittera pas le programme. Il posait toujours la même question. Toute idée: Merci:

public static void Main(string[] args) 
    { 
     int enterYourNumber; 
     char shortLetter; 
     bool validEntry; 



     while (true) 
     { 
      do 
      { 
       Console.WriteLine("Please enter an integer: "); 
       string numberString = Console.ReadLine(); 
       validEntry = int.TryParse(numberString, out enterYourNumber); 
       WriteNumber(enterYourNumber); 
       if (!validEntry) 
       { 
        Console.WriteLine("Entry must be an integer"); 
       } 
      } while (!validEntry); 

      Console.WriteLine("Do you still want to enter a number? Y/N"); 
      shortLetter = Convert.ToChar(Console.ReadLine()); 


     } 
    } 




    public static void WriteNumber(int wordValue) 
    { 
     switch (wordValue) 
     { 
      case 1: 
       Console.WriteLine("You have entered number one"); 
       break; 
      case 2: 
       Console.WriteLine("You have entered numbered two"); 
       break; 
      case 3: 
       Console.WriteLine("You have entered numbered three"); 
       break; 
      default: 
       Console.WriteLine("You have exceeded the range of number 1-3"); 
       break; 
     } 
    } 
} 

}

================================= Salut Robert et Bill voici ce que j'ai obtenu maintenant. J'apprécierais que vous puissiez donner quelques idées sur la façon d'améliorer le codage. Merci de votre aide.

 public static void Main(string[] args) 
    { 
     int intEnterYourNumber; 
     char charShortLetter; 
     string strUserInput; 

     do 
     { 
      do 
      { 
       Console.WriteLine("Please enter the integer: "); 
       strUserInput = Console.ReadLine(); 
      } while (!int.TryParse(strUserInput, out intEnterYourNumber)); 
      WriteNumber(intEnterYourNumber); 
      Console.WriteLine("Do you still want to enter a number? Y/N"); 
      charShortLetter = Convert.ToChar(Console.ReadLine().ToUpper()); 
     } while (charShortLetter == 'Y'); 
    } 



    public static void WriteNumber(int wordValue) 
    { 
     switch (wordValue) 
     { 
      case 1: 
       Console.WriteLine("You have entered number one"); 
       break; 
      case 2: 
       Console.WriteLine("You have entered numbered two"); 
       break; 
      case 3: 
       Console.WriteLine("You have entered numbered three"); 
       break; 
      default: 
       Console.WriteLine("You have exceeded the range of number 1-3"); 
       break; 
     } 
    } 

Répondre

0

Déplacez le bloc try/catch à l'intérieur de la boucle. La suggestion de Robert Harvey de la boucle do/while est bonne aussi.

int enterYourNumber; 
char shortLetter; 

do 
{ 
     try 
     { 
      Console.WriteLine("Please enter the integer: ");     
      enterYourNumber = Convert.ToInt32(Console.ReadLine());     
      WriteNumber(enterYourNumber); 
     } 
     catch(FormatException) 
     {           
      Console.WriteLine("Please enter an integer not a character"); 
     } 

     shortLetter = '\0'; 
     do 
     { 
      try 
      { 
       Console.WriteLine("Do you still want to enter a number? Y/N");      
       shortLetter = Convert.ToChar(Console.ReadLine()); 
      } 
      catch(FormatException) 
     { 
       Console.WriteLine("Please enter a single character"); 
     } 
     }  
     while (shortLetter == '\0')  
}     
while (shortLetter == 'y' || shortLetter == 'Y') 

} 

     public static void WriteNumber(int wordValue) 
     { 

     switch (wordValue) 
     { 
      case 1: 
       Console.WriteLine("You have entered number one"); 
       break; 
      case 2: 
       Console.WriteLine("You have entered number two"); 
       break; 
      case 3: 
       Console.WriteLine("You have entered number three"); 
       break; 
      default: 
       Console.WriteLine("You have exceeded the range of number 1-3 "); 
       break; 
     } 
+0

merci uncleo celui-ci fonctionne plutôt bien. Je ne suis toujours pas avec la déclaration "Do-WHiLe" donc je dois revoir cela et comprendre la logique. Parce que dans mon code précédent, il semble que ce soit assez redondant et je pense que c'est ce dont j'ai besoin. – tintincutes

+0

La clé de l'instruction Do While est que, dans les programmes qui requièrent une entrée de l'utilisateur, placer le While en bas garantit que la boucle s'exécute au moins une fois et que l'utilisateur doit entrer au moins une fois. Vous n'écrirez pas toujours vos boucles While de cette façon. La plupart du temps, vous ne voulez entrer dans la boucle que si la condition While est satisfaite. –

+0

uncleo J'ai encore essayé votre travail le premier "shortletter == null" ne peut pas être exécuté car Null ne peut pas être converti en char. Et la deuxième capture (FormatException) ne fonctionne pas aussi bien. – tintincutes

2
do 
{ 
    Console.WriteLine("Please enter the integer: ");     
    enterYourNumber = Convert.ToInt32(Console.ReadLine());     
    WriteNumber(enterYourNumber);     
    Console.WriteLine("Do you still want to enter a number? Y/N");      
    shortLetter = Convert.ToChar(Console.ReadLine()); 
}     
while (shortLetter == 'y' || shortLetter == 'Y') 
+0

grâce Robert Que diriez-vous si l'utilisateur doit saisir un caractère pour la première fois? – tintincutes

+0

Mettez ce Do/While dans votre essai/catch, comme dans le code d'origine. –

+0

Malheureusement, il ne laisse pas l'utilisateur dans la boucle après une exception, ce qui était la question posée. – billjamesdev

1

de Robert est un début, mais peut-être que nous voulons toujours essayer attraper ...

Remplacez votre fonction principale avec:

do 
{ 
    enterYourNumber = GetNumber(); 
    WriteNumber(enterYourNumber);     
    Console.WriteLine("Do you still want to enter a number? Y/N"); 
    shortLetter = Convert.ToChar(Console.ReadLine()); 
} 
while (shortLetter == 'y' || shortLetter == 'Y') 

et ajoutez cette fonction:

public static int GetNumber() { 
    boolean done = false; 
    int value; 
    while (!done) { 
     Console.WriteLine("Please enter the integer: "); 
     try { 
      value = Convert.ToInt32(Console.ReadLine()); 
      done = true; 
     } 
     catch { 
      Console.WriteLine("Please enter an integer not a character"); 
     } 
    } 
} 

Ensuite, retirez votre tentative d'attraper dans la fonction principale.

+0

Salut Bill s'il vous plaît voir ma réponse éditée il semble que la nouvelle méthode a un problème ici – tintincutes

+0

Eh bien, vous avez un code supplémentaire après la ligne "while". Que la ligne est la dernière instruction du bloc initial (avant les déclarations de fonction) – billjamesdev

+0

Salut Bill J'ai essayé ce que vous avez suggéré mais il semble que je reçois toujours une erreur. Je serais heureux si vous pouviez vérifier le code. Merci – tintincutes

8

Je pense que votre code serait plus facile d'apprendre et de comprendre si vous n'avez pas utilisé exceptions pour tester vos numéros. Essayez d'utiliser int.TryParse() à la place (TryParse() sur MSDN). TryParse() retourne vrai (ou faux) selon que le nombre entré était valide:

int number; 
bool validEntry = int.TryParse(enterYourNumber, out number); 
if (!validEntry) 
{ 
    Console.WriteLine("Entry must be an integer."); 
} 

En outre, apprendre davantage sur le faire ... while (link). une boucle do..while est similaire à une boucle while régulière, sauf qu'une boucle do-while est exécutée une fois avant l'évaluation de l'expression conditionnelle.

bool validEntry; 
int enteredNumber; 
do 
{ 
    Console.Write("Please enter the integer: "); 
    string numberString = Console.ReadLine(); 
    validEntry = int.TryParse(numberString, out enteredNumber); 
    if (!validEntry) 
    { 
     Console.WriteLine("Entry must be an integer."); 
    } 
} while (!validEntry); 

Enroulez le tout dans une autre boucle while (« Voulez-vous toujours d'entrer un numéro (Y/N)? ») Et vous avez terminé.

Profitez,

Robert C. Cartaino

+0

Merci pour le lien Robert, va essayer votre exemple et apprendra la boucle while do. Cela signifie que le "try and catch" en C# n'est pas bon pour les débutants comme moi? – tintincutes

+0

Vous ne devriez jamais utiliser essayer ... attraper dans des circonstances exceptionnelles (excusez le jeu de mots). Il ne doit jamais être utilisé pour un flux de programme normal (attendu). – rein

+0

Salut Robert J'ai une question s'il vous plaît vérifié mes notes éditées ci-dessus. Merci. Le "N" ici ne fonctionne pas si je veux quitter mon programme. Je ne suis pas sûr Si j'ai écrit l'autre correctement. S'il vous plaît voir mon code. Merci. – tintincutes

Questions connexes