2017-02-15 13 views
0

Мой цикл while не будет циклическим, если bool correctInput получает значение false. Он должен зацикливаться до тех пор, пока вход не будет правильно введен из использования. Допустимые входы - целые числа, большие, чем ноль. Все, что является целым числом, вызовет попытку catch и изменит trueInput boolean на false, вызвав цикл. Если целое число не больше нуля, чем correctInput будет повернуто к false, вызывающему цикл. Только когда пользователь вводит правильный ввод, цикл должен выйти. В настоящее время он не зацикливается, когда вход неверен.Делать в то время как wont цикл с булевым тестом C#

private static void InputMangementShapeSquare() 
    { 
     bool correctInput = true; 
     int Length = 0; 
     string rawInput; 
     do 
     { 
      correctInput = true; 

      Console.WriteLine("Enter the Length: "); 
      rawInput = Console.ReadLine(); 
      try 
      { 
       Length = Int32.Parse(rawInput); 
       if (Length > 0) 
       { 
        correctInput = false; //Changes correctInput to false if input is less than zero 
       } 
      } 
      catch (Exception exception) 
      { 
       correctInput = false; //Changes correctInput flag to false when rawinput failed to be converted to integer. 
       Console.WriteLine("input must be an interger greater than zero.");      
      } 

     } while (correctInput == false); 

     Square square = new Square(Length); 

    } 

ответ

1

Из вашего описания, вы хотите correctInput быть установлен неверно, если длина составляет меньше ноль, но ваш код устанавливает его в false если больше нуля.

  if (Length > 0) 
      { 
       correctInput = false; //Changes correctInput to false if input is less than zero 
      } 

Оно должно быть:

  if (Length <= 0) 
      { 
       correctInput = false; //Changes correctInput to false if input is less than zero 
      } 
+0

только видел это ...: / – DigitalDulphin

2

я бы изменить if:

if (Length <= 0) { 
    correctInput = false; //Changes correctInput to false if input is less than zero 
} 

в C#, вы можете также использовать TryParse, так что вам не нужно try catch:

int value; 
if (!int.TryParse(rawInput, out value)) { 
    correctInput = false; 
} 

И то же самое с Ваш код:

correctInput = false; 
do { 
    Console.WriteLine("Enter the Length: "); 
    rawInput = Console.ReadLine(); 

    int value; 
    if (int.TryParse(rawInput, out value) && value >= 0) { 
     correctInput = true; 
    } else { 
     Console.WriteLine("input must be an interger greater than zero."); 
    } 
} while (!correctInput); 
0

Основываясь на ваш комментарий в этом блоке, вы ошиблись оператор в, если блок:

if (Length > 0) 
    { 
      correctInput = false; //Changes correctInput to false if input is less than zero 
    } 

Если вы хотите изменить correctInput к false, если ввод меньше 0, то он должен быть

if (Length < 0) 
0

Не проблема в этой части вашего цикла?

if (Length > 0) 
{ 
    correctInput = false; //Changes correctInput to false if input is less than zero 
} 

Не должно ли это выглядеть так?

if (Length < 0) 
{ 
    correctInput = false; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^