2014-11-23 104 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