2012-04-18 2 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

End with Caseを閉じるのを忘れたようです。