Включить строку пропускает все дела - PullRequest
1 голос
/ 06 августа 2011
            Console.WriteLine(used+ "\n"+ extracted[used]);
            switch (extracted[used])
            {
                case "*": result = number1 * number2; break;
                case "/": result = number1 / number2; break;
                case "+": result = number1 + number2; break;
                case "-": result = number1 - number2; break;
                default: Console.WriteLine("Error - Could not assign starting value."); break;
            }
            Console.WriteLine("Marker 3");
            Console.WriteLine(result);

Этот фрагмент выводит:

1

+

Ошибка - невозможно назначить начальное значение.

Маркер 3

0

Почему это происходит?Во второй строке выходных данных программа выводит, что значение извлеченного [используемого] равно «+», однако в операторе switch не удается перейти к регистру «+», вместо этого перейти в значение по умолчанию и распечатать ошибку, изатем распечатка значения заполнителя для «результата».Если это имеет значение, извлекается массив строк.

Ответы [ 3 ]

2 голосов
/ 06 августа 2011

Попробуйте переключиться на extracted[used].Trim(), и вы получите правильный переключатель для удара.

Console.WriteLine(used+ "\n<<<"+ extracted[used] + ">>>");
switch (extracted[used].Trim())
{
    case "*": result = number1 * number2; break;
    case "/": result = number1 / number2; break;
    case "+": result = number1 + number2; break;
    case "-": result = number1 - number2; break;
    default: Console.WriteLine("Error - Could not assign starting value."); break;
}
Console.WriteLine("Marker 3");
Console.WriteLine(result); 
1 голос
/ 06 августа 2011

Я протестировал следующий код, и он работает, как ожидалось.Таким образом, проблема должна быть со значением extracted[used].

static int binary_op(int n1, int n2, string op)
{
  int result;
  switch (op)
  {
    case "*":
      result = n1 * n2;
      break;
    case "/":
      result = n1 / n2;
      break;
    case "+":
      result = n1 + n2;
      break;
    case "-":
      result = n1 - n2;
      break;
    default:
      throw new Exception("invalid operation");
  }
  return result;
}

. Вы вызываете это так:

binary_op(2, 2, "+");  // => 4

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

1 голос
/ 06 августа 2011

Фактически, вторая строка вывода не показывает, что извлеченный [использованный] равен «+», но выглядит так. Я бы не удивился, если бы в экстракте были какие-то невидимые пробелы [использовано] ...

Вы должны отлаживать свою программу, чтобы убедиться в значении извлеченного [используемого], а не доверять тому, что видите в WriteLine.

...