Ваш код содержит логику для работы с калькулятором, где вы хотите обрабатывать ввод чисел и математические действия. Однако, есть несколько потенциальных проблем, которые могут мешать правильной работе сложения.
В методе math_action, вы добавляете второе число (second_num) к first_num и затем сразу обнуляете first_num, если уже было выбрано действие (user_action != '\0'). Это кажется немного странным, так как это приведет к тому, что вы теряете значение first_num каждый раз, когда выполняется какое-либо действие. Возможно, вы хотели обнулить first_num только после завершения операции (например, после нажатия кнопки равно).
Предполагаемая логика работы должна быть следующей:
Пользователь вводит первое число, которое сохраняется в first_num.
Пользователь выбирает действие (например, сложение), и флаг isNewNumber устанавливается в true.
Пользователь вводит второе число, которое затем добавляется к first_num, если действие это сложение.
Результат выводится на экран, и в first_num сохраняется результат операции.
Таким образом, попробуйте изменить логику в методе math_action таким образом, чтобы сохранять first_num до выполнения следующего действия:
System::Void math_action(Char action) {
double second_num = 0;
if (!String::IsNullOrEmpty(this->result_lab->Text)) {
second_num = System::Convert::ToDouble(this->result_lab->Text);
}
if (this->user_action != '\0') {
switch(this->user_action) {
case '+': this->first_num += second_num; break;
// Добавьте другие операции, если нужно
// case '-': this->first_num -= second_num; break;
// ...
}
this->result_lab->Text = System::Convert::ToString(this->first_num); // Вывод результата на экран
this->user_action = '\0'; // Сброс выбранного действия
} else {
this->first_num = second_num; // Сохранение введенного числа как first_num, если действие не выбрано
}
isNewNumber = true; // Устанавливаем флаг, что начинается ввод нового числа
this->result_lab2->Text = System::Convert::ToString(this->first_num) + " " + action; // Отображаем first_num и действие в result_lab2
}
Также убедитесь, что вы правильно обрабатываете нажатие кнопки равно (=), где и должно происходить окончательное сложение (или другая операция) и вывод результата. Убедитесь, что first_num обнуляется в правильный момент, чтобы предотвратить нежелательное суммирование со старыми значениями.