Member 13959779 Ответов: 1

Проблема ввода с клавиатуры


I'm new to C# and  I'm now doing scientific calculator assignment. Can you please help me from calculation from keyboard input in detail because my code doesn't work? I  want to know all about from keyboard input.Also I don't know how to make multiopreation like 2+6+9-6*5. Sorry if I've grammar wrongs. Thank you so much all.


Что я уже пробовал:

private void Main_KeyPress(object sender, KeyPressEventArgs e)
       {
           if (e.KeyChar == Convert.ToChar(Keys.Escape))
           {
               txtDisplay.Clear();
           }
           if (e.KeyChar == Convert.ToChar(Keys.Back))
               btnBack_Click(sender, e);

           if ((txtDisplay.Text == "0") || eqClick == false)
           {
               switch (e.KeyChar.ToString())
               {
                   case "+":
                       btnPlus.PerformClick();
                       break;
                   case "-":
                       btnMinus.PerformClick();
                       break;
                   case "*":
                       btnMultiply.PerformClick();
                       break;
                   case "/":
                       btnDivide.PerformClick();
                       break;
                   case "=":
                       btnEqual.PerformClick();
                       break;
                   case ".":btnDot.PerformClick();
                       break;
               }

           }
       }

1 Ответов

Рейтинг:
1

OriginalGriff

Мне неприятно это говорить, но ты все делаешь неправильно.

У вас есть две проблемы: первая заключается в том, что вы "заставляете" события щелчка там, где вам это не нужно - гораздо лучшее решение состоит в том, чтобы ваши обработчики событий щелчка вызывали метод, а затем вызывали тот же метод из вашего другого кода. Это отделяет пользовательский интерфейс от кода обработки, что означает, что становится намного проще изменить вещи позже.

Во-вторых, то, что вы пытаетесь сделать, на самом деле не сработает. Вы приводите пример ... 2+6+9-6*5" как "мультиоперация", но вам нужно будет определить, что должно произойти в результате: 55 или -13, прежде чем идти дальше.
Первый результат тривиален: каждый раз, когда вы получаете оператор, вы оцениваете данные перед ним. Так что вы получаете

2
2+          Evaluate: 2 == 2
2+6
2+6+        Evaluate: 2 + 6 == 8
  8+9
  8+9-      Evaluate: 8 + 9 == 17
   17-6
   17-6*    Evaluate: 17-6 == 11
     11*5
     11*5=  Evaluate: 11*5 == 55

Но для второго вы не можете этого сделать, потому что вам нужно включить приоритет оператора: "*" является "более важным", чем"+", поэтому вы должны оценить (6*5) прежде чем вы сможете сделать все остальное - а это уже целая нагрузка сложнее.

Я бы посоветовал вам взглянуть на то, как работают другие калькуляторы: не только Calc.EXE, но и Microsoft Mathematics тоже: Загрузите Microsoft Mathematics 4.0 из официального центра загрузки Microsoft[^] и выясните, чего вы хотите достичь, прежде чем прыгать в код, как вы это делали до сих пор!