Зачем пытаться ... кроме блока здесь не работает - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь запустить следующий код с помощью try .. кроме блока:

program TriangleArea;
uses crt, sysutils;
type 
    num = real; 
var
  a, b, c, s, area : num; 
begin
    write('Enter lengths of 3 sides (separated by spaces): '); 
    try
        readln (a, b, c);
        s := (a + b + c)/2.0;
        area := sqrt(s * (s - a)*(s-b)*(s-c));
        writeln(area);     
    except
        on E: Exception do
            ShowMessage( 'Error: '+ E.ClassName + #13#10 + E.Message ); 
    end; 
end. 

Но выдается следующее сообщение об ошибке:

$ fpc triangle_area.pas
Free Pascal Compiler version 3.0.0+dfsg-11+deb9u1 [2017/06/10] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling triangle_area.pas
triangle_area.pas(14,2) Error: Identifier not found "try"
triangle_area.pas(15,3) Fatal: Syntax error, ";" expected but "identifier READLN" found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode

Почему не используется идентификатор "try"найденный.Я использую fpc версии 3.0.0 в стабильном Linux Debian.

Где проблема и как ее можно решить?Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 19 июня 2019

Поместите {$MODE OBJFPC} или {$MODE DELPHI} под объявлением вашей программы.

Причина в том, что по умолчанию компилятор компилируется в MODE FPC, который не поддерживает исключения.

Дополнительные источники: Один Два Три

С другой стороны, инструкция ShowMessage не будет компилироваться с Free Pascal. Правильный код:

program TriangleArea;
{$mode delphi}
uses crt, sysutils;
type
    num = real;
var
  a, b, c, s, area : num;
begin
    write('Enter lengths of 3 sides (separated by spaces): ');
    try
        readln (a, b, c);
        s := (a + b + c)/2.0;
        area := sqrt(s * (s - a)*(s-b)*(s-c));
        writeln(area);
    except
        on E: Exception do
            write( 'Error: '+ E.ClassName + #13#10 + E.Message );
    end;
end.

Позже отредактируйте: объявление type num=real правильно, но я не вижу его реального использования.

...