2015-09-21 8 views
0

Это моя программа для ввода двух чисел и оператора, а затем выполнения математики и выплевывания ответа (спасибо асинк за его помощь ранее). Пока все работает хорошо, за исключением тех случаев, когда я ничего не вводил. Я пытаюсь заставить его сказать «нет ввода», попробуйте еще раз, но он просто сработает. Кто-нибудь знает, почему? заранее спасибо.Как настроить обработку исключений без ввода

using System; 
class Calculation 
{ 
    public static void Main(string[] data) 
    { 

     if (data.Length == 0) 
     { 
      Console.WriteLine("No input... Try again"); 

      return; 
     } 

     double result; 

     if (!Double.TryParse(data[0], out result)) 
     { 
      Console.WriteLine("Invalid input: " + data[0]); 

      return; 
     } 

     Console.WriteLine("Starting with number: " + result); 

     char op; 
     double number; 

     string errorMessage; 

     do 
     { 
      if (!TryGetData(out op, out number, out errorMessage)) 
      { 
       Console.WriteLine("Invalid input: " + errorMessage); 

       continue; 
      } 

      switch (op) 
      { 
       case '+': 
        result += number; 
        break; 
       case '-': 
        result -= number; 
        break; 
       case '*': 
        result *= number; 
        break; 
       case '/': 
        result /= number; 
        break; 
       default: 
        Console.WriteLine("Done"); 
        continue; 
      } 

      Console.WriteLine("Result = " + result.ToString()); 


     } while (Char.ToLower(op) != 'q'); 
    } 

    static bool TryGetData(out char anOperator, out double aNumber, out string message) 
    { 
     aNumber = 0; 
     message = null; 

     Console.Write("Enter an operator and a number or 'q' to quit: "); 

     var line = Console.ReadLine(); 

     anOperator = line[0]; 

     if (anOperator != 'q' && anOperator != 'Q') 
     { 
      if (line.Length <= 2) 
      { 
       message = "Enter an operator followed by a space and then a number."; 

       return false; 
      } 

      var isValidNumber = Double.TryParse(line.Substring(2), out aNumber); 

      if (!isValidNumber) 
      { 
       message = "Invalid input: " + line.Substring(2); 

       return false; 
      } 

      if (isValidNumber && (anOperator == '/' && aNumber == 0)) 
      { 
       message = "Cannot divide by 0."; 

       return false; 
      } 

      if (line[1] != ' ') 
      { 
       message = "Make sure to put a space between operator and number."; 

       return false; 
      } 

     } 

     return true; 
    } 
} 
+1

_ "но это просто сбой" _ - Запустите это в отладчике, поскольку это намного быстрее. Мы не здесь, чтобы отлаживать весь ваш код для вас. Удачи! – MickyD

+0

Попробуйте данные == null кроме data.length –

+1

if (data == null || data.length == 0) –

ответ

0

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

C# по сути является языком короткого замыкания, и если первая часть оператора if является ложной (или истинной), другие части не будут оцениваться.

if (data == null || data.length == 0) 
{ 
    Console.WriteLine("No input... Try again"); 
    return; 
} 
+0

Спасибо за ваш ответ и объяснение, ошибка по-прежнему происходит после выполнения того, что вы сказали. ошибка system.indexoutofrangeexception в system.string.get_chars при вычислении.trygetdata at calculate.main – user3555573

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