我正在编写一个小程序来计算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.
我收到以下错误:
i386的免费Pascal编译器版本2.4.4-2ubuntu1 [2011/09/27] 版权所有(c)1993-2010,作者:Florian Klaempfl目标操作系统:Linux for i386 编译/home/ubuntu/Desktop/TrafficFine.pas TrafficFine.pas(39,3) 错误:非法表达式TrafficFine.pas(40,3)错误:常量 表达式预期TrafficFine.pas(40,3)致命:语法错误,&#34;:&#34; 预期但&#34;标识符ON&#34;发现致命:编译中止
我直接从书中跟踪了这个例子,所以我不确定我哪里出错了。任何帮助,将不胜感激。感谢。
答案 0 :(得分: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 :(得分:1)
好像你忘了用一个结尾关闭Case;