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语句无法转到大小写“+”,而是转到默认值,并打印出错误,并且然后打印出“结果”的占位符值。如果重要,则提取的是一个字符串数组。
答案 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
在代码中将此逻辑分解为自己的函数可能是个好主意。您可以单独测试该函数,然后当从代码中的其他地方调用它时,它会在调用代码中知道问题。