Lazarus 中的 If-else 用法
If-else usage in Lazarus
我是 Lazarus 的新手,今天我遇到了 if-else 用法的问题。一切正常,但只有一个 if 语句,但是当我尝试编写一个 if-else 语句时,出现此错误:
unit1.pas(48, 3) Fatal: Syntax error, ";" expected but "Else" found
我不确定我是否需要用 begin end
将代码包装在语句中,但 this FreePascal wiki page 显示如下
我的代码:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
a, b, c, d, x, x1, x2:real;
begin
a := strToFloat(Edit1.Text);
b := strToFloat(Edit2.Text);
c := strToFloat(Edit3.Text);
d := Power(b, 2) - 4 * a * c;
if d > 0 then
x1 := (-b + sqrt(d))/(2 * a);
x2 := (-b - sqrt(d))/(2 * a);
Label1.Caption := 'x1 = ' + floatToStr(x1) + #10 + 'x2 = ' + floaTToStr(x2)
else
if d < 0 then
Label1.Caption := 'Розв*язків немає';
else
x1 := (-b + sqrt(d))/(2 * a);
Label1.Caption := 'x = ' + floatToStr(x);
end.
您似乎在尝试使用缩进对语句下的代码进行分组。 Pascal 不使用缩进来嵌套代码(老实说我不确定它叫什么)。您需要使用 begin
然后再使用 end
.
意味着您的代码应如下所示:
if d > 0 then
begin
// All 3 lines below will run if "d > 0"
x1 := (-b + sqrt(d)) / (2 * a);
x2 := (-b - sqrt(d)) / (2 * a);
Label1.Caption := 'x1 = ' + floatToStr(x1) + #10 + 'x2 = ' + floatToStr(x2);
end // Do not ";" since the if statement is not over yet
else if d < 0 then
begin
Label1.Caption := 'Розв*язків немає';
end // Do not ";" since the if statement is not over yet
else
begin
x1 := (-b + sqrt(d)) / (2 * a);
Label1.Caption := 'x = ' + floatToStr(x);
end; // End of the if statment
我是 Lazarus 的新手,今天我遇到了 if-else 用法的问题。一切正常,但只有一个 if 语句,但是当我尝试编写一个 if-else 语句时,出现此错误:
unit1.pas(48, 3) Fatal: Syntax error, ";" expected but "Else" found
我不确定我是否需要用 begin end
将代码包装在语句中,但 this FreePascal wiki page 显示如下
我的代码:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
a, b, c, d, x, x1, x2:real;
begin
a := strToFloat(Edit1.Text);
b := strToFloat(Edit2.Text);
c := strToFloat(Edit3.Text);
d := Power(b, 2) - 4 * a * c;
if d > 0 then
x1 := (-b + sqrt(d))/(2 * a);
x2 := (-b - sqrt(d))/(2 * a);
Label1.Caption := 'x1 = ' + floatToStr(x1) + #10 + 'x2 = ' + floaTToStr(x2)
else
if d < 0 then
Label1.Caption := 'Розв*язків немає';
else
x1 := (-b + sqrt(d))/(2 * a);
Label1.Caption := 'x = ' + floatToStr(x);
end.
您似乎在尝试使用缩进对语句下的代码进行分组。 Pascal 不使用缩进来嵌套代码(老实说我不确定它叫什么)。您需要使用 begin
然后再使用 end
.
意味着您的代码应如下所示:
if d > 0 then
begin
// All 3 lines below will run if "d > 0"
x1 := (-b + sqrt(d)) / (2 * a);
x2 := (-b - sqrt(d)) / (2 * a);
Label1.Caption := 'x1 = ' + floatToStr(x1) + #10 + 'x2 = ' + floatToStr(x2);
end // Do not ";" since the if statement is not over yet
else if d < 0 then
begin
Label1.Caption := 'Розв*язків немає';
end // Do not ";" since the if statement is not over yet
else
begin
x1 := (-b + sqrt(d)) / (2 * a);
Label1.Caption := 'x = ' + floatToStr(x);
end; // End of the if statment