2016-09-27 6 views
0

Я сделал простую программу, которая запрашивает у пользователя свое имя, а затем номер 1 или 2, а затем записывает их имя и номер в консоль.Есть ли способ сделать цикл с несколькими условиями? C#

Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как сделать это так, чтобы пользователь мог вводить числа 1 или 2 только в одном цикле (я предполагаю, что есть что-то очевидное, которого я пропускаю).

Код:

 string strName; 
     string strNumber; 
     int intNumber; 

     Console.WriteLine("What is your name?"); 
     strName = Console.ReadLine();   

     Console.WriteLine("Please enter a number (1 or 2)"); 
     strNumber = Console.ReadLine(); 
     bool test = int.TryParse(strNumber, out intNumber); 

     while (intNumber >2) 

     { 
      Console.WriteLine("Please enter a number (1 or 2)"); 
      strNumber = Console.ReadLine(); 
      int.TryParse(strNumber, out intNumber); 
     } 
     while (intNumber < 1) 

     { 
      Console.WriteLine("Please enter a number (1 or 2)"); 
      strNumber = Console.ReadLine(); 
      int.TryParse(strNumber, out intNumber); 
     } 
     while (test == false) 

     { 
      Console.WriteLine("Please enter a number (1 or 2)"); 
      strNumber = Console.ReadLine(); 
      int.TryParse(strNumber, out intNumber); 
     } 


     Console.WriteLine("Welcome, your name is "+ strName+ " your number is " + intNumber); 
     Console.ReadKey(); 

Как видно из приведенной выше коды у меня есть 3 отдельных петель, которая создает проблему, так как они бегут сверху вниз, и как только они прошли они больше цикла, так пользователь может ввести: 10, f, а затем 7, и программа будет в порядке с этим.

Если есть еще один простой способ сделать то, что я хочу, вы могли бы рассказать мне, пожалуйста.

-Положения

+1

Вы пробовали утверждение 'if'? – Stefan

ответ

2

Вы имеете в виду что-то вроде этого?

int response = 0; 

while (response != 1 && response != 2) 
{ 
    Console.WriteLine("Please enter a number (1 or 2)"); 
    var strNumber = Console.ReadLine(); 
    int intNumber; 
    if (int.TryParse(strNumber.Trim(), out intNumber)) 
    { 
     response = intNumber; 
    } 
} 
+0

Это будет цикл навсегда. 'response' всегда будет не равным ни 1, ни 2. – Abion47

+0

oops my bad. Исправлена. – kemiller2002

1

Вы можете объединить все те, в то время как петли ...

while (intNumber < 1 || intNumber > 2 || ...) 
{ 
} 
0

вы можете добавить столько условий, сколько вы хотите за цикл. Я не уверен, что я получил то, что логика вы должны реализовать надежду, что это помогает:

 string nameStr = String.Empty; 
     string numberStr = String.Empty; 
     int parsedNumber = 0; 
     bool continueLoop = true; 
     bool isParsed = true; 

     do 
     { 
      try 
      { 
       Console.WriteLine("What is your name?"); 
       nameStr = Console.ReadLine(); 

       Console.WriteLine("Please enter a number (1 or 2)"); 
       numberStr = Console.ReadLine(); 
       isParsed = int.TryParse(numberStr, out parsedNumber); 
       if (parsedNumber > 2) 
       { 
        ///todo: Implement your Logic here! 
       } 
       else if (parsedNumber < 1) 
       { 
        ///todo: Implement your Logic here! 
       } 
       else 
       { 
        ///todo: Implement your Logic here!       
       } 
      } 
      catch (Exception) 
      { 
       continueLoop = false; 
      } 
     } while (isParsed && continueLoop); 
0

Если вы хотите использовать FOR loop с несколькими условиями, ниже приведен пример

for(int i=0,j=0;i<5&& j>-5;i++,j--){ 
//Do something 
} 
Смежные вопросы