2016-05-31 1 views
0

Итак, я новичок в C#, и я просто хотел создать простой калькулятор с консолью. Мой вопрос: как я могу заставить пользователя выбирать разные значения для num1 и num2, когда они решили разделить нуль или делить на ноль, чтобы предотвратить сбой программы из-за неопределенного результата. Я решил, что могу использовать цикл while, чтобы проверить и увидеть, соответствуют ли результаты ответа как int, и если не повторить всю программу. Как я могу проверить ответ, чтобы проверить, является ли результат int?Повторите функцию, если выход не определен

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
    { 

     int num1; 
     int num2; 
     string operand; 
     float answer; 

     while() 
     { 

      Console.WriteLine("Please enter the first number."); 
     num1 = Convert.ToInt32(Console.ReadLine()); 

     Console.WriteLine("Please enter which operator you would like to use(+,-,*,/)"); 
     operand = Console.ReadLine(); 

     Console.WriteLine("Please enter the second number."); 
     num2 = Convert.ToInt32(Console.ReadLine()); 

      switch (operand) 
      { 
       case "+": 
        answer = num1 + num2; 
        Console.WriteLine(num1 + " + " + num2 + " = " + answer); 
        Console.ReadKey(); 
        break; 
       case "-": 
        answer = num1 - num2; 
        Console.WriteLine(num1 + " - " + num2 + " = " + answer); 
        Console.ReadKey(); 
        break; 
       case "*": 
        answer = num1 * num2; 
        Console.WriteLine(num1 + " * " + num2 + " = " + answer); 
        Console.ReadKey(); 
        break; 
       case "/": 
        if (num2 == 0) 
        { 

         Console.WriteLine("You cannot devide by zero, please select a different number."); 
         num2 = Convert.ToInt32(Console.ReadLine()); 
        } 
        else if (num1 == 0) 
        { 
         Console.WriteLine("You cannot devide zero, please select a different number."); 
         num1 = Convert.ToInt32(Console.ReadLine()); 
        } 
        else 
        { 
         answer = num1/num2; 
         Console.WriteLine(num1 + "/" + num2 + " = " + answer); 
         Console.ReadKey(); 

        } 
        break; 
       } 

      } 
     } 
    } 
} 
+1

Сначала: всегда указывайте соответствующий язык. Во-вторых: Примеры должны быть ** минимальными **, сосредоточены не на цели, которую вы пытаетесь выполнить, а на конкретной проблеме, которую вы пытаетесь выполнить, и содержащей только достаточно кода для воспроизведения этой проблемы, см. http://stackoverflow.com/help/mcve –

ответ

0

Вам действительно нужно только проверить второе значение (num2). Вы хотите оценить сразу после чтения. Как вы справляетесь с этим, зависит от вас. Вы можете зацикливаться на неопределенное время, но вы также хотите проверить (как с любым из этих входов) и дать пользователю возможность выйти, если они не могут понять направления ввода.

0

Возможное решение с использованием while, смотрите ниже:

  case "/": 
       while (num2 == 0) 
       { 

        Console.WriteLine("You cannot devide by zero, please select a different number."); 
        num2 = Convert.ToInt32(Console.ReadLine()); 
       } 

       answer = num1/num2; 
       Console.WriteLine(num1 + "/" + num2 + " = " + answer); 
       Console.ReadKey(); 

       break; 

Однако, вы должны думать об изменении использования int.TryParse метод (https://msdn.microsoft.com/en-us/library/system.int32.tryparse%28v=vs.110%29.aspx), как если бы тип пользователя то, что не является числом, конвертирование. ToInt32 собирается бросить FormatException (https://msdn.microsoft.com/en-us/library/sf1aw27b%28v=vs.110%29.aspx).

0

Я думаю, что очищение cleanset заключается в извлечении некоторых методов (выберите код и щелкните правой кнопкой мыши с помощью мыши-> refactoring-> extractMethod). одна из функций должна быть «getSecondNumber» внутри этой функции вы начинаете с «ввести второй номер или нажмите кнопку„Q“, чтобы бросить курить.

конец вы заканчиваются, если Int.TryParse результаты с ложным или номер == 0 снова вызовите свою функцию (и вы перейдете в начальную позицию «введите второй номер ...» удачи