локальная переменная не определена в WriteLine - PullRequest
0 голосов
/ 30 октября 2018

Я очень новичок в c # и пытаюсь сделать простой калькулятор. Однако, когда я пишу Console.WriteLine(total), я получаю ошибку во время компиляции:

Использование неназначенной локальной переменной 'total'

Локальная переменная 'total' может не инициализироваться перед доступом к

вот код:

static void Main(string[] args)
{        
    Console.WriteLine("write a number:");
    int num_one = Convert.ToInt32(Console.ReadLine());

    Console.WriteLine("write a operator: + ; - ; * ; /");
    string op = Console.ReadLine();

    Console.WriteLine("write a second number:");
    int num_two = Convert.ToInt32(Console.ReadLine());

    int total;

    switch (op)
    {
        case "+":
            total = num_one + num_two;
            break;
        case "-":
            total = num_one - num_two;
            break;
        case "*":
            total = num_one * num_two;
            break;
        case "/":
            total = num_one / num_two;
            break;
    }

    Console.WriteLine(total); // <-- this line gives a compile-time error
}

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Я рекомендую использовать Nullable integer, чтобы начать с присвоенного ему нулевого значения, и в конце проверить, имеет ли оно значение или нет, чтобы определить, ввел ли пользователь соответствующий оператор.

int? total = null;
0 голосов
/ 30 октября 2018

Как сказал Блинди, вам нужно обработать это либо начальным значением для переменной total, либо значением по умолчанию в коммутаторе.

Но перед этим вам действительно нужно подумать, что будет логичным сценарием, когда вы попытаетесь выполнить неизвестную операцию между двумя числами.

Мое простейшее решение выглядело бы так:

switch (op)
{
    case "+":
        total = num_one + num_two;
        break;
    case "-":
        total = num_one - num_two;
        break;
    case "*":
        total = num_one * num_two;
        break;
    case "/":
        total = num_one / num_two;
        break;
    default:
        throw new OperatorUnknownException(op);
}

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

0 голосов
/ 30 октября 2018

Вопрос: Что произойдет, если op равно ^?

Ответ: total никогда не назначается. Это ошибка в C #.

Чтобы исправить это, либо обработайте другие случаи в вашем операторе switch (должно быть легко, всего несколько сотен тысяч случаев), либо инициализируйте переменную total, объявив ее:

int total = 0;
...