Вы не используете if ... then ... else
и begin ... end
правильно.
Существует концепция блока , который начинается с begin
и заканчивается end
. Везде, где ожидается один оператор , вы можете вместо него поставить block . Это также относится к if <condition> then <statement> else <statement>;
.
Итак, этот код действителен:
if something() then
stuff
else
stuff;
... как это:
if something() then
begin
stuff;
moreStuff;
end
else
begin
otherStuff;
moreOtherStuff;
end;
Однако, это (которое вы используете) не является:
if something() then
begin
stuff // I guess here you omitted the semicolon because you correctly remembered
// that there shouldn't be a semicolon before `else`, but...
else // WRONG, this is in the middle of the block!
otherStuff;
end;
Чтобы понять почему, давайте исправим отступ, чтобы он соответствовал логической интерпретации этого кода:
if something() then
begin
stuff
else // ????????
otherStuff;
end;
Вы получаете ошибку, так как begin ... else ... end
не является допустимой конструкцией. Поскольку есть begin
, а затем end
перед else
, ваш else
находится в середине блока then
, что не имеет смысла.
Убедитесь, что end
ваш блок перед началом else
части, а затем begin
новый блок.