循环进入条件下的c#逻辑错误

时间:2012-07-30 22:31:17

标签: c# syntax

我有一些奇怪的逻辑事情正在发生。

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)。

输入是一样的,但这里肯定是错的。有什么想法吗?

提前感谢。

4 个答案:

答案 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循环类型。这更正确。