【发布时间】:2017-12-11 04:47:12
【问题描述】:
我正在做一个项目,以制作一种超级基础的编程语言来取乐。我正在处理打印命令,它有 2 个不同的选项,直接打印或从堆栈打印。该程序已经在堆栈中有项目,但是每当它运行从堆栈打印的打印命令时,它都会跳过它。这是我的代码:
if (String.Equals(cmds[pos], "print"))
{
if (cmds[pos + 1].StartsWith("\""))
{
Console.Write(cmds[pos + 1].Replace("\"", "").Replace(@"\q", "\"").Replace(@"\n", "\n"));
outPos = pos + 2;
}
else if (string.Equals(cmds[pos + 1], "stack"))
{
Console.WriteLine(strStack.Pop());
outPos = pos + 2;
}
else
{
//Console.WriteLine("HelloKreeKraw");
outPos = pos + 1;
}
}
下面是命令:
push "Hi\n"
throw stack
push "Hello"
print stack
print "World!\n"
end
push 命令压栈,end 命令结束程序。程序无缘无故跳过打印堆栈。我测试了所有可能的东西,除非我错过了什么?
编辑: string.replace 和 cmds[pos + 1].StartsWith("\"") 工作得很好,但是当它检查第二个单词是否堆栈时,它会随机出现故障。我已经发现是这种情况。
【问题讨论】:
-
是的,嵌套的 if 更少,不确定尝试通过嵌套 if 来学习有什么好处。
-
你能用断点先检查一些初步的东西吗,例如
pos是正确的(因为数组是从 0 开始的),cmds数组正确地用空格等分割。 -
这一行确保 Replace() 正常工作
Console.Write(cmds[pos + 1].Replace("\"", "").Replace(@"\q", "\"").Replace(@"\n", "\n")); -
如果 (String.Equals(cmds[pos], "print")) 应该是 if (String.StartsWith(cmds[pos], "print"))
-
当你调试你的代码时,这条线是否命中?
if (cmds[pos + 1].StartsWith("\""))
标签: c# string string-comparison