2012-04-18 72 views
0

我正在寫一個小程序來計算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

我跟着例如直接從一本書,所以我不知道在那裏我已經錯了。任何幫助,將不勝感激。謝謝。

回答

4

您的代碼中存在一些缺陷,我在源代碼中進行了更正和評論。試試這個新版本。

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. 
1

好像你忘了關閉案例與結束;