Почему символ тоже не меняется в моем понимании? - PullRequest
0 голосов
/ 08 мая 2020

Я здесь новичок, поэтому, пожалуйста, извините меня за плохое форматирование, я написал простой калькулятор в c#, но, похоже, мое умножение и деление работают неправильно. при запуске кода он работает нормально, пока я не попытаюсь вывести ответ, а затем он выведет «Ошибка, неизвестный оператор», что я сказал ему вывести, когда он не идентифицирует оператор, хранящийся в переменной операции. вот код (извините за сброс так много кода, я не уверен, что актуально, а что нет):

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

namespace ConsoleApp1
{
    class MainClass
    {
        public static void Main(string[] args) // method called "main", when the program starts, this runs
        {
        start:
            // variable declarations
            double Num1;
            double Num2;
            int operationId;
            string operationName = "1";
            string operationName2 = "1";
            Char operation;
            double answer;

            // choosing an operator
            Console.WriteLine("select an operation from the list and type it's associated number:");
            Console.WriteLine("1 - sum \n" + "2 - subtraction \n" + "3 - division\n" + "4 - multipication \n");
            operationId = Convert.ToInt32(Console.ReadLine());

            // checking which operation has been chosen
            if (operationId == 1)
            {
                operationName = "added to";
                operationName2 = "added";
                operation = '+';
            } else if (operationId == 2)
            {
                operationName = "subtracted from";
                operationName2 = "subtracted";
                operation = '-';
            } else if (operationId == 3) 
            {
                operationName = "divided";
                operationName2 = "divided by";
                operation = '/';
            } else if (operationId == 4)
            {
                operationName = "multiplied";
                operationName2 = "multiplied by";
                operation = '*';
            } else
            {
                Console.WriteLine("Invalid option");
                goto start;
            }

            // receving user input
            Console.WriteLine("Insert a number to be " + operationName + ":");
            Num1 = Convert.ToDouble (Console.ReadLine());
            Console.WriteLine("Insert a number to be " + operationName2);
            Num2 = Convert.ToDouble(Console.ReadLine());

            //calculating answer
            if (operation == '+')
            {
                answer = Num1 + Num2;
            }
            else if (operation == '-')
            {
                answer = Num1 - Num2;
            }
            else if (operationId == '/')
            {
                answer = Num1 / Num2;
            }
            else if (operationId == '*')
            {
                answer = Num1 + Num2;
            } else
            {
                answer = 0000;
                Console.WriteLine("Error, Unknown operator \n");
                goto start;
            }
            Console.WriteLine();
            Console.WriteLine("The result is:");
            Console.WriteLine(answer);

            Console.ReadKey();
            Console.WriteLine();
            goto start;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Ваш первый 2 if чек operation, второй 2 чек operationId. Измените умножение и деление, чтобы также проверить operation.

//...
else if (operation == '/')
{
    answer = Num1 / Num2;
}
else if (operation == '*')
{
    answer = Num1 * Num2; //<-- Change to this from Num1 + Num2
}
//...  

И, кстати, ваш блок умножения складывает числа, а не умножает. Я исправил это в своем блоке выше.

0 голосов
/ 08 мая 2020

Думаю, проблема в том, что - 2 условия проверяют операцию и 2 условия проверяют идентификатор операции. Возможно, вы захотите изменить все проверки на операцию или идентификатор операции.

if (operation == '+')
        {
            answer = Num1 + Num2;
        }
        else if (operation == '-')
        {
            answer = Num1 - Num2;
        }
        else if (operationId == '/')
        {
            answer = Num1 / Num2;
        }
        else if (operationId == '*')
        {
            answer = Num1 + Num2;
        } else
        {
            answer = 0000;
            Console.WriteLine("Error, Unknown operator \n");
            goto start;
        }
...