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