2014-12-26 6 views
-5

Я пытался сделать калькулятор с функцией, но когда я хочу вернуть значение «вычисление», оно даст значение переменной в моей функции, которое равно 0, а не вычисление , также отображается текст по умолчанию, когда я пишу правильный оператор.C# консольное приложение простой калькулятор не работает

static void Main(string[] args) 
    { 

     string input1,input2,opera,product = ""; 
     Int32 v,n; 

     Console.WriteLine("please insert first number: "); 
     input1 = Console.ReadLine(); 

     Console.WriteLine("please insert second number: "); 
     input2 = Console.ReadLine(); 

     if (numeric(input1, out v) && numeric(input2, out n)) 
     { 
      Console.WriteLine("give operator: *, /, -, +"); 
      opera = Console.ReadLine(); 

      Console.WriteLine(operat(product)); 


     } 

    private static string operat(string oper){ 

     double input1 = 0, input2 = 0; 
     double calculation = 0; 

     switch (oper) 
     { 
      case "*": 
       calculation += input1 * input2; 
       break; 
      case "/": 
       calculation += input1/input2; 
       break; 
      case "+": 
       calculation += input1 + input2; 
       break; ; 
      case "-": 
       calculation += input1 - input2; 
       return calculation.ToString(); 
      default: 
       Console.WriteLine("you gave the write operator..."); 
       break; 
     } 
     return calculation.ToString(); 

просто игнорировать числовую функцию ...

+0

При вызове 'operat' вы используете переменную 'product', которая, как представляется, не настроена. –

+0

Lol! Просто подумайте об этом .... намек: что делает 0 раз 0 равным? –

+3

Похож на хорошую возможность тренироваться с отладчиком. Пройдите через код, проверяя значение каждой переменной на каждом шаге. Когда вы укажете, где переменная имеет значение, отличное от ожидаемого, выясните, почему и исправить эту проблему. Прополощите, повторите. –

ответ

1

Измените функцию OPERAT на

private static string operat(string oper,double input1,double input2) 

И удалить эту линию

double input1 = 0, input2 = 0; 

Позвони Operat функции

operat(opera,double.Parse(input1),double.Parse(input2)); 
+0

У вас почти есть это ... Вы уверены, что имеете правильные параметры? – Rolo

+0

Я понял это с вашей помощью, спасибо, что не торопился. – Thibaut

+1

@xwpedram, как указано на первом комментарии к этому вопросу, вы должны передать оперу вместо продукта. – Rolo

2

Просто потому, что вы называете ваши переменные одинаковы в различных функций (input1 и input2), это не означает, что они будут иметь одинаковые значения. На самом деле они даже не имеют одного и того же типа! Попробуйте удалить часть =0, чтобы увидеть ее сами, компилятор скажет вам, что она никогда не была назначена.

Вы хотите только иметь переменные, содержащие операнды и оператор в основной функции, и передавать их на ваши рабочие функции.

0

Рефакторинг входных данных1 и input2 в поле static void main в поле класса. Используйте эти ссылки в методе операции. Переменные input1 и input2 в операторном методе не содержат значения, которые фиксируются в вашем основном методе static void. Это только локальные переменные метода

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