2015-11-23 5 views
3

Я создал программу и столкнулся с проблемой. когда я отлаживаю программу и не вводим значение, например. номер и несколько раз нажмите кнопку ввода, программа в итоге выйдет из строя. Мне интересно, есть ли правило проверки, которое может быть установлено, чтобы программа не сработала, когда значение не было введено.Программа вылетает, когда значение не вводится

int userChoice; 

static void Main(string[] args) 
{ 
    new Program().Welcome(); 
} 


public void Welcome() 
{ 

    Console.WriteLine("      HELLO"); 
    Console.ReadLine(); 
    Main_Menu(); 

} 

private void Main_Menu() 
{ 

    Console.WriteLine("1). Welcome"); 
    Console.WriteLine("2). Help Facilities"); 
    Console.WriteLine("3). Exit"); 

    userChoice = Convert.ToInt16(Console.ReadLine()); 
    Options(); 
} 

private void Options() 
{ 

    if (userChoice == 1) 
    { 

     Console.Clear(); 
     Console.WriteLine("Welcome....................."); 
     Console.ReadLine(); 


    } 
    if (userChoice == 2) 
    { 
     Console.Clear(); 
     Console.WriteLine("Help........................."); 
     Console.ReadLine(); 
    } 

    if (userChoice == 3) 
    { 
     //if user selects option 3 the program will exit 

    } 
+1

Укажите крешлогам, если проблема происходит сбой –

+0

вы не вставили полный код –

+0

Используйте 'Int.TryParse()' вместо 'Convert.ToInt()'. Это попытается преобразовать число и вернуть 'bool', указав, было ли оно успешным. – sab669

ответ

0

Использовать этот метод Main_Menu() вместо вашей. Вы получите плавный выход.

private void Main_Menu() 
     { 
      Console.WriteLine("1). Welcome"); 
      Console.WriteLine("2). Help Facilities"); 
      Console.WriteLine("3). Exit"); 

      string userChoiceSTR = Console.ReadLine(); 

      if (!string.IsNullOrEmpty(userChoiceSTR)) 
      { 
       userChoice = Convert.ToInt16(userChoiceSTR); 
       try 
      { 
       Options(); 
      } 
      catch 
      { 
       Console.WriteLine("Did not put any value. Please Select a menu: "); 
       Main_Menu(); 
      } 
      } 
      else { 
       Console.WriteLine("Did not put any value. Please Select a menu: "); 
       Main_Menu(); 
      } 
     } 
+0

Большое вам спасибо, это очень помогло, я студент, и я делаю этот курс в колледже. – Naz

+0

Возможно ли, что я могу сделать еще одно правило проверки только числа от 1 до 3, которое будет введено без сбоя или выхода из программы. – Naz

+0

@Naz Да, это так, используйте, если тесты для проанализированных значений –

6

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

Вот некоторые сокращенные для целочисленных типов (целые числа)

  • длинные = Int64
  • INT = Int32
  • короткая = Int16
  • байт = (что whould быть INT8, если она существует)

Так что просто используйте стенографию, чтобы они были более читабельными, поскольку они более отчетливы.

int t; 
if(int.TryParse(Console.ReadKey(),out t){ 
//Do work with the number t 
} 
else{ 
//Handle a non numerical input 
} 
0

Если поместить пустую строку в Convert.ToInt16 он будет бросать FormatException. Поэтому лучше попытаться проанализировать ввод на целое число и позволить пользователю повторно войти, если что-то пошло не так.

short s; 
while (!short.TryParse(Console.ReadLine(), out s)) 
{ 
    Console.WriteLine("Input invalid. Retry."); 
} 

(я использовал short, так как вы это делали в примере кода. Лично я обычно хожу на int)

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