2015-08-22 4 views
2

Я немного новичок в этой теме, но вкратце я имею проблемы с небольшой проблемой проверки. В основном, я пытаюсь сделать простую программу проверки, которая будет собирать вход пользователя, а затем определить, является ли вход действительным с точки зрения правильного ввода, число положительное, а число должно быть либо 0, 1, 2, 3, 4 or 5.C# Валидация для определенного ввода

Общая программа запускается, но проблема, с которой я столкнулся, - это любая форма ввода, которая считается ошибкой, отображая мой оператор ошибки, даже если это допустимый ввод, например, 5. Я чувствую, что есть небольшая ошибка, я сделал то, что вызывает это. Так что есть предложения?

int user_input; 
int count = 0; 
do 
{ 
    Console.Write("\n\nUser Input:" 

    if ((int.TryParse(Console.ReadLine(), out user_input) == false)||(user_input < 0 || user_input != 0 ||user_input != 1 || user_input != 2 
       || user_input != 3 || user_input != 4 || user_input != 5)) 
    { 

     Console.WriteLine("Error : the action entered is not a valid number."); 
     count = 0; 
    } 
    else 
     count = 1; 

ответ

4

Ваша ошибка в том, что вы используете OR operator. Например, пользователь печатает 3. В операторах одно условие возврата false (input != 3), но все остальные вернутся true .. Вот почему вы всегда идти в if condition ..

Вы можете использовать оператор И, но я могу рекомендовать вам упростить ваше состояние. Это будет более понятным и понятным:

var count = 0; 
do 
{ 
    Console.Write("\n\nUser Input:"); 

    int user_input; 
    if ((int.TryParse(Console.ReadLine(), out user_input) == false) || (user_input < 0 || user_input > 5)) 
    { 

     Console.WriteLine("Error : the action entered is not a valid number."); 
     count = 0; 
    } 
    else 
     count = 1; 
} 
while (count != 1); 
+0

Просто один язык придираться: Это не обязательно ошибка использовать оператор OR, хотя это ошибка * злоупотребление * оператором ИЛИ. – Sebivor

+0

Спасибо за быстрый ответ, отлично реализованы! –

1

У вас уже есть ответ о проблеме с предикатской логикой. Но вы можете еще больше упростить с помощью LINQ, как:

var count = (new string[]{"1","2","3","4","5"}).Contains(Console.ReadLine()) ? 1 : 0; 
Смежные вопросы