2014-11-23 79 views
-5

我是新来的德尔福,我真的不明白为什么这3行代码不起作用。任何帮助将不胜感激。德尔福新手错误

代码:

begin 
rNum := StrToFloat(Edit6.Text); 
edtRound.Text := IntToStr(round(rNum)); 
edtSqr.Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3); 
edtSqrt.Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3); 
edtFrac.Text := FloatToStr(Frac(rNum)); 
edtTrunc.Text := IntToStr(trunc(rNum)); 
edtFrac.Text := FloatToStr(frac(rNum)); 

end; 

错误: 缺少操作符或分号

+0

您的代码段中没有语法错误。 – 2014-11-23 15:20:39

+1

检查这三条线之前的线。如果之前的行缺少一个';',那么它不能在该行上被检测到,因为'''* * *本身可以放在一个新行上。只有当编译器看到'edtFrac'时,它才能说出真的没有';'。 – hvd 2014-11-23 15:23:28

+0

这3行中的每一行都给了我这个错误。如果我注释掉这一行,它会给我下一行的错误。如果我将这三行中的任意一行移到我的代码的顶部,我仍然会遇到这个问题。我将完整的代码添加到原始帖子中。 – user3616928 2014-11-23 15:37:05

回答

3

这个程序编译成功:

{$APPTYPE CONSOLE} 

uses 
    SysUtils; 

procedure Foo; 
var 
    Text: string; 
    rNum: Double; 
begin 
    rNum := StrToFloat(Text); 
    Text := IntToStr(round(rNum)); 
    Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3); 
    Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3); 
    Text := FloatToStr(Frac(rNum)); 
    Text := IntToStr(trunc(rNum)); 
    Text := FloatToStr(Frac(rNum)); 
end; 

begin 
end. 

我为了做一个简单的程序改变了你的代码,可以轻松发布。

这表明你的问题不在于你展示的代码。问题在别的地方。弄清楚具体的问题不应该成为你学习的主要教训。主要的教训应该是如何简化问题并进行明确的诊断。

你应该做的是从你当前的代码开始,并开始剥离出来。当你去除对行为有影响的东西时,你已经学到了一些东西。把这个东西放回去,找出为什么删除它改变了行为。那时你应该有一个解释。

现在考虑这个方案:

{$APPTYPE CONSOLE} 

uses 
    SysUtils; 

const 
    Frac: Double = 0.0; 

procedure Foo; 
var 
    Text: string; 
    rNum: Double; 
begin 
    rNum := StrToFloat(Text); 
    Text := IntToStr(round(rNum)); 
    Text := FloatToStrF(sqr(rNum), ffFixed, 8, 3); 
    Text := FloatToStrF(sqrt(rNum), ffFixed, 8, 3); 
    Text := FloatToStr(Frac(rNum)); 
    Text := IntToStr(trunc(rNum)); 
    Text := FloatToStr(Frac(rNum)); 
end;  
begin 
end. 

它无法编译上指Frac和编译器会报告该错误的行:

[dcc32 Error]: E2066 Missing operator or semicolon

所以,你可能有类似的问题。您将定义一个额外的符号来隐藏您想要引用的符号。

+0

这里的downvote特别令人困惑。 – 2014-11-24 07:31:11

+0

不是我gov。请注意,最近我在德尔福的答案中看到了几个d/vs,其中唯一的解释似乎是选民表示不赞同回答不好的问题。 – MartynA 2014-11-24 09:38:31