异常处理代码中的非法表达式错误

问题描述:

我正在写一个小程序来计算FreePascal中的流量罚款。源代码如下:异常处理代码中的非法表达式错误

program TrafficFine; 

{$mode objfpc}{$H+} 

uses 
{$IFDEF UNIX}{$IFDEF UseCThreads} 
cthreads, 
{$ENDIF}{$ENDIF} 
Classes,SysUtils; 

var 
    userInput : Char; 
    Fine  : Integer; 
    TotalFine : Integer; 
    DaysPassed: Integer; 
    FineType : Integer; 

begin 

    userInput := 'y'; 

    while (userInput = 'Y') or (userInput = 'y') do 
    begin; 
     writeln('Enter type of fine:'); 
     writeln('- Enter 1 for not wearing a seat-belt.'); 
     writeln('- Enter 2 for driving without a license'); 
     writeln('- Enter 3 for over-speeding.'); 

     try 
      write('Enter value: '); 
      readln(FineType); 
      if(FineType <0) or (FineType>3) then 
       raise exception.Create('Fine type outside of range.'); 
      case FineType of 
      1: Fine:= 500; 
      2: Fine:= 1000; 
      3: Fine:= 2000; 
     except 
     on e: exception do {line 39} 
     begin 
      Writeln('Error: '+e.message); 
      continue; 
     end; 

     write('Enter number of days passed since fine: '); 
     readln(DaysPassed); 
     if daysPassed<=10 then 
      TotalFine := Fine; 
     else if (daysPassed >10) and (daysPassed <=30) then 
      TotalFine := Fine * 2; 
     else 
      TotalFine := Fine*2 + Fine*0.5; 

     writeln('Total Fine is ' + IntToStr(TotalFine));   
     writeln('Would you like to calculate another fine: '); 
     readln(userInput); 
    end; 
end. 

我收到以下错误:

Free Pascal Compiler version 2.4.4-2ubuntu1 [2011/09/27] for i386 Copyright (c) 1993-2010 by Florian Klaempfl Target OS: Linux for i386 Compiling /home/ubuntu/Desktop/TrafficFine.pas TrafficFine.pas(39,3) Error: Illegal expression TrafficFine.pas(40,3) Error: Constant Expression expected TrafficFine.pas(40,3) Fatal: Syntax error, ":" expected but "identifier ON" found Fatal: Compilation aborted

我跟着例如直接从一本书,所以我不知道在那里我已经错了。任何帮助,将不胜感激。谢谢。

您的代码中存在一些缺陷,我在源代码中进行了更正和评论。试试这个新版本。

program TrafficFine; 

{$mode objfpc}{$H+} 

uses 
{$IFDEF UNIX}{$IFDEF UseCThreads} 
cthreads, 
{$ENDIF}{$ENDIF} 
Classes,SysUtils; 

var 
    userInput : Char; 
    Fine  : Integer; 
    TotalFine : Integer; 
    DaysPassed: Integer; 
    FineType : Integer; 

begin 

    userInput := 'y'; 

    while (userInput = 'Y') or (userInput = 'y') do 
    begin //removed semicolon 
     writeln('Enter type of fine:'); 
     writeln('- Enter 1 for not wearing a seat-belt.'); 
     writeln('- Enter 2 for driving without a license'); 
     writeln('- Enter 3 for over-speeding.'); 

     try 
      write('Enter value: '); 
      readln(FineType); 
      if(FineType <0) or (FineType>3) then 
       raise exception.Create('Fine type outside of range.'); 
      case FineType of 
      1: Fine:= 500; 
      2: Fine:= 1000; 
      3: Fine:= 2000; 
      end;//added end; 
     except 
     on e: exception do {line 39} 
     begin 
      Writeln('Error: '+e.message); 
      continue; 
     end; 
     end; //added end; 

     write('Enter number of days passed since fine: '); 
     readln(DaysPassed); 
     if daysPassed<=10 then 
      TotalFine := Fine //removed semicolon 
     else if (daysPassed >10) and (daysPassed <=30) then 
      TotalFine := Fine * 2 //removed semicolon 
     else 
      TotalFine := (Fine*2) + (Fine div 2);//replaced this sentence (Fine*2) + (Fine*0.5) 

     writeln('Total Fine is ' + IntToStr(TotalFine)); 
     writeln('Would you like to calculate another fine: '); 
     readln(userInput); 
    end; 
end. 

好像你忘了关闭案例与结束;