delphixe2“if-then”条件错误

时间:2014-08-15 08:23:35

标签: delphi if-statement compiler-errors conditional-statements logical-operators

我在delphi中编写了以下代码,但它无法正常工作。

这段代码有问题吗?

返回此变体的函数:

   function DoRun(a:String;b:boolean):variant; 
   Begin   
       result:=a; 
   End;

这是使用上面的功能是故障代码:

 procedure TForm2.BitBtn1Click(Sender: TObject);

    var   
        a,b,c:Integer;

    begin   

        a:=10;   
        b:=20;   
        c:=30;

        if (a=1) and (b=2) and (c=3) and DoRun('',true)='0' then

            showmessage('True');

    end;

结果:' True'消息见。

"如果"行代码结束括号"(DoRun('',true)=' 0')"通过正确的运作工作:

procedure TForm2.BitBtn1Click(Sender: TObject); 

var   
    a,b,c:Integer;

begin   
    a:=10;   
    b:=20;   
    c:=30;

    if (a=1) and (b=2) and (c=3) and (DoRun('',true)='0') then

        showmessage('True');

end;

请帮助确定问题并告诉我如何使此代码按预期工作。

2 个答案:

答案 0 :(得分:4)

第一段代码肯定是错误的。你的条件是

if ( (a=1) and (b=2) and (c=3) and DoRun('',true) ) = '0' 

等于

if Variant(false) = Variant('0') then 
  ShowMessage('True');

显然对于变体类型false='0'

第二段代码按预期工作。第二个比较是OK,只有布尔比较,DoRun函数没有执行,比较结果是false

答案 1 :(得分:1)

所有

if ( (a=1) and (b=2) and (c=3) and DoRun('',true) ) = '0' 

不一样

if ( DoRun('',true) and (a=1) and (b=2) and (c=3) ) = '0'

这不运行!!运行时错误"无效参数"!

这不是你给我反面的例子吗? :) :)你有一个逻辑错误!所以,你的答案与主题无关。

编译器从左到右解释。编译器" DoRun()"错误条件是由算法引起的,不能视为括号。如果" DoRun()"条件最重要的条件我们得到这个错误" RTE"这就是你会看到的原因。 " 括号"开头的条件如果您使用,您将看到没有编译。在这种情况下,编译器显然不是最终条件,而允许左侧最右侧的括号不允许。

是的,编译器错误地解释了!但是编译器会这样解释它!