打开一个字符串会跳过所有情况

时间:2011-08-06 14:38:46

标签: c# switch-statement

            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

+

错误 - 无法指定起始值。

Marker 3

0

为什么会这样?在输出的第二行中,程序打印出提取的[used]的值为“+”,但是switch语句无法转到大小写“+”,而是转到默认值,并打印出错误,并且然后打印出“结果”的占位符值。如果重要,则提取的是一个字符串数组。

3 个答案:

答案 0 :(得分:2)

尝试切换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 :(得分:1)

实际上,输出的第二行没有显示你提取的[used]等于“+”,但它看起来像它。如果提取物中有一些看不见的白色空间,我不会感到惊讶[使用] ......

您应该调试程序以确保提取[used]的值,而不是信任您在WriteLine中看到的内容。

答案 2 :(得分:1)

我测试了以下代码,它按预期工作。所以问题必须是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

在代码中将此逻辑分解为自己的函数可能是个好主意。您可以单独测试该函数,然后当从代码中的其他地方调用它时,它会在调用代码中知道问题。