Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Подскажите в чем дело в коде выдает исключение

ITBR Ученик (5), открыт 2 недели назад
вобщем я хотел сделать чтоб и с клавиатуры можно было вводить числа и операторы и с кнопок в форме winforms, но каждый раз выдает исключение и я не понимаю как это пофиксить вобщем конфликтуют два метода

  private void Score() 
{
if (this.user_action == ' ')
{
return;
}

double second = Convert.ToDouble(this.result_lab.Text);
double res = 0;
this.result_lab2.Text += Convert.ToString(second) + "=";

switch (this.user_action)
{
case '+': res = this.first_num + second; break;
case '-': res = this.first_num - second; break;
case '*': res = this.first_num * second; break;
case '%': res = this.first_num * second / 100; break;
case '/':
if (second != 0)
{
res = this.first_num / second;
}
else
{
this.result_lab.ForeColor = Color.Red;
this.result_lab2.ForeColor = Color.Red;
MessageBox.Show(this, "Действие запрещено, на 0 делить нельзя!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

this.result_lab2.Text = "";
}
break;
}
 второй метод - https://pastebin.com/tMN9JZ5X 
Текст исключения **************
System.FormatException: Входная строка имела неверный формат.
в System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
в System.Convert.ToDouble(String value)
в Calc.Button_Key(Object sender, KeyEventArgs e) в C:\Users\Kirill\source\repos\KURSOVAIACALCULATOR\KURSOVAIACALCULATOR\Form1.cs:строка 494
в System.Windows .Forms.Control.OnKeyDown(KeyEventArgs e)
в System.Windows .Forms.Control.ProcessKeyEventArgs(Message& m)
в System.Windows .Forms.Form.ProcessKeyPreview(Message& m)
в System.Windows .Forms.Control.ProcessKeyMessage(Message& m)
в System.Windows .Forms.Control.WmKeyChar(Message& m)
в System.Windows .Forms.Control.WndProc(Message& m)
в System.Windows .Forms.ButtonBase.WndProc(Message& m)
в System.Windows .Forms.Button.WndProc(Message& m)
в System.Windows .Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows .Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows .Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
1 ответ
Максим Искусственный Интеллект (198341) 2 недели назад
Это говорит о том, что число, которое ты ввёл, не является числом, конвертация Convert.ToDouble не прошла. Это может быть связано с тем, что ты используешь неправильный разделитель (точку/запятую) для дробной части.
ITBRУченик (5) 2 недели назад
дело в том что как бы я с кнопки нажал 1 и потом нажал на клавиатуре + и вот как бы выдало исключение но вот дело в том что если сделать только по кнопкам все нормально и если вводить только числа и операторы с калавиатуры все нормально но вот если сделать число с кнопки и символ с клавиатуры выдает такое исключение как это решить
Максим Искусственный Интеллект (198341) ITBR, если ты в поле ввёл 1+, выражение "1+" никак не сможет конвертироваться в число, потому что это не число.
ITBRУченик (5) 2 недели назад
дело лишь в том что они отельно друг от друга работают прекрасно, то есть через кнопки все складывается и через клавиатуру но если совместить и сделать допустим с кнопки вести 1 а клавиатуры + выдает то что я говорил
Максим Искусственный Интеллект (198341) ITBR, это уже не проблема ошибки, а проблема логики кода. Если ты хочешь вводить целое математическое выражение, например 2+2*3 и потом нажимать равно и вычислять, то тут тебе надо не число парсить, а целое выражение парсить, а это задача уже посложнее будет. Тебе надо строить целое дерево разбора. Если же ты хочешь 2+2 решать, то и тут нужно как-то парсить, но уже чуть попроще. Тебе надо разбить выражение на два числа и оператор.
Похожие вопросы