我有一些奇怪的逻辑事情正在发生。
x=false;
这个不工作:
while (R2.TS("a") && R2.TL("b") && (s=R2.SL().Trim()).Length > 0)
{
x=true;
}
结果:x = false;
这个 工作:
while (R2.TS("a") && R2.TL("b"))
{
if((s=R2.SL().Trim()).Length > 0)
{
x=true;
}
}
结果:x = true;
另外,也许知道这些函数只有在正确的顺序执行时才会返回true,比如R2.TS(“a”)然后是R2.TL(“b”)然后((s = R2.SL) ).Trim())。长度> 0)。
输入是一样的,但这里肯定是错的。有什么想法吗?
提前感谢。
答案 0 :(得分:3)
是的,循环做了两件不同的事情。
我认为你的意思是逻辑错误,而不是语法错误。语法错误意味着它不会编译。逻辑错误意味着它没有达到预期效果。
如果R2.SL()
表达式为false,则第一个将终止。至少在第一轮时,(s=R2.SL().Trim()).Length > 0
必定为false,因此循环1终止,x
永远不会设置为true。这是你在两个循环之间获得差异的唯一方法,所有其他条件都是相同的。
在循环2中,R2.SL()
的中间值不是问题,只要其他循环条件保持为真。当(s=R2.SL().Trim()).Length > 0
评估为true时,将设置x
。
答案 1 :(得分:1)
使用调试器luke。我们没有必要弄清楚为什么这不会给你你想要的结果。你最好在一些帮助下解决这个问题。单击第一行并按F9。它应该变成红色。运行你的程序,它将停在这一行。然后,您可以将鼠标悬停在不同的变量上,以查看哪些变量具有哪些值。然后按F11进入程序。
答案 2 :(得分:0)
在第一种情况下,R2必须遵守三个条件 R2.TS(“a”)AND R2.TL(“b”)AND(s = R2.SL()。Trim())。长度> 0),在您进入循环并返回x
的值之前在第二种情况下,您只有两个条件,即R2必须遵守的条件 R2.TS(“a”)和R2.TL(“b”)并且在输入循环之后,在返回x值之前有一个新条件。
它们可能都有效,但在第一种情况下,您不提供符合循环要求的数据。
答案 3 :(得分:-1)
它可能与&&和||操作。他们是短缺的。这意味着,在条件中出现第一个false
时,将持续查看操作。
由于操作短路,您将获得2个不同的循环,这些循环具有不同的逻辑。使用2循环类型。这更正确。