2013-11-19 3 views
0

Итак, я сделал базовый двоичный конвертер в десятичном формате, и я пытаюсь проверить вход пользователя, так что он может быть только 0 или 1, это работает отлично в первый раз, если они печатают неправильное значение, которое он запрашивает у них, чтобы повторно ввести его, но проблема возникает, если они вводят неправильное значение во второй раз, как бы я мог это исправить? или как цикл обратно к определенной части программы? Большое спасибо, вот мой код:Как исправить эту проверку? C#

if (iBinaryNum1 == 1 || iBinaryNum1 == 0) 
{ 
    Console.WriteLine("The binary value entered for integer 1 is correct"); 
} 
else 
{ 
    Console.WriteLine("The binary value entered for integer 1 is incorrect"); 
    Console.WriteLine("Please Re-enter this value"); 
    iBinaryNum1 = Convert.ToInt32(Console.ReadLine()); 
} 
+0

Проще, если вы не читаете строку и получаете кет-прессы по одному вместо этого? См. Http://msdn.microsoft.com/en-us/library/471w8d85%28v=vs.110%29.aspx – doctorlove

ответ

1

Ответ на этот вопрос на самом деле довольно просто, не уверен, что если вы нашли решение еще, но лучший способ для выполнения этой проверки будет просто, чтобы удалить, если еще заявления все вместе и использовать время цикла, как следовали:

while (iBinaryNum1 < 0 || iBinaryNum1 > 1) 
     { 
      Console.WriteLine("The value entered was incorrect"); 
      Console.WriteLine("Please Re-enter this value: "); 
      iBinaryNum1 = Convert.ToInt32(Console.ReadLine()); 
     } 

Это будет просто постоянно предлагать пользователю повторно ввести значение, пока оно не получится правильно

5

Да, я бы предложил использовать петлю. Например (в псевдокоде)

bool validValue = false; 
while(!validValue) 
{ 
    // Get input from the user 
    // Print a message and set validValue 
    // As soon as you set validValue to false the loop will break 
} 

// Your value will be valid here. 

Кроме того, пожалуйста, будьте осторожны с Convert.ToInt32 - он бросает исключение, если вы ввели неверное значение. Вместо этого вы можете посмотреть на int.TryParse.

+0

Несомненно, вы хотели использовать do while :) –

+0

@AshBurlaczenko Наверняка нет. Этот шаблон действителен. – BartoszKP

+0

Любая структура петли будет делать, действительно. Вам просто нужно быть осторожным в таких случаях, что вы не хотите печатать сообщение «Ваш вход недействителен» перед первой записью (например, 'do {if (недействительно) {printMessage();} getInput(); } '). Я всегда предпочитаю вариацию, где код ввода ('ReadValue()') не дублируется прямо над или под контуром, как в другом ответе. – CompuChip

1

Используйте while петли вместо:

iBinaryNum1 = ReadValue(); 
    iBinaryNum2 = ReadValue(); 

    while (!(iBinaryNum1 == 1 || iBinaryNum1 == 0)) 
    { 
    Console.WriteLine("The binary value entered for integer 1 is correct"); 
    iBinaryNum1 = ReadValue(); 
    iBinaryNum2 = ReadValue(); 
    } 

Вы должны сучок чтения в отдельную функцию, чтобы иметь возможность вызвать его повторно. Затем поместите цикл while, который не будет принимать продолжение до тех пор, пока не будут введены правильные значения.

1

Заверните его в то время как петли дел

do { 
    if (iBinaryNum1 == 1 || iBinaryNum1 == 0) 
    { 
     Console.WriteLine("The binary value entered for integer 1 is correct"); 
    } 
    else 
    { 
     Console.WriteLine("The binary value entered for integer 1 is incorrect"); 
     Console.WriteLine("Please Re-enter this value"); 
     iBinaryNum1 = Convert.ToInt32(Console.ReadLine()); 
    } 
} while (iBinaryNum1 ! = 999); 

, если вы наберете в 999 или некоторое значение выхода он будет выйти из цикла.

0

Если это Windows Forms/приложения WPF, вероятно, можно ограничить пользователю вводить только допустимые значения, путем применения ограничений на входной контроль, такие как TextBox, NumericUpDown или MaskedTextBox т.д.

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