为什么我得到22/3 itprog~1.pas致命:语法错误,;预期,但ELSE发现

时间:2017-03-02 01:16:09

标签: pascal

PROGRAM approvedapplicants(input,output);
uses crt;
var
applcntname,housingcomm,clarendon_court,providence_gardens,
sangre_grande_villas:string;
slry,spcslry:integer;
c_qual_sal,s_qual_sal,p_qual_sal,qualifying_salary:integer;

BEGIN
writeln('enter applicant name, salary, spouce salary');
readln(applcntname,slry,spcslry);
writeln('enter housing community');
readln(housingcomm);
BEGIN
qualifying_salary:=0;
IF(housingcomm=clarendon_court)
then
qualifying_salary:=$12500;
writeln('you have selected clarendon court!');
readln(c_qual_sal) ;
end if  ;

  else if(housingcomm=sangre_grande_villas)then
  qualifying_salary:=$9500;
  writeln('you have selected sangre grande villas!');
  readln(s_qual_sal);
  end if ;

  else(housingcomm=providence_gardens)then;
  qualifying_salary:=$7500;
  writeln('you have selected providence gardens!');
  readln(p_qual_sal);
  end if;
  END.

1 个答案:

答案 0 :(得分:4)

通常,在SO上,我们不会发布家庭作业/课程作业的答案,但是你的代码是如此广泛,我认为在这种情况下可以做出例外。

尝试编译并运行这个程序,我认为这几乎与我认为你想要的一样,然后我会解释一些关于它的事情:

program approvedapplicants(input,output);
uses crt;

var
  ApplicantName,
  HousingCommunity,
  ClarendonCourt,
  ProvidenceGardens,
  SangreGrandVillas :string;
  Salary,
  SpouseSalary,
  QualifyingSalary : Integer;
  CQualSal,
  PQualSal,
  SQualSal : Integer;
  slry,spcslry:integer;

begin
  ClarendonCourt := 'Clarendon Court';
  ProvidenceGardens := 'Providence Gardens';
  SangreGrandVillas := 'Sangre Grand Villas';
  QualifyingSalary := 0;

  writeln('enter applicant name');
  readln(ApplicantName);

  writeln('enter salary');
  readln(Salary);

  writeln('enter spouse salary');
  readln(SpouseSalary);

  writeln('enter housing community');
  readln(HousingCommunity);

  if (HousingCommunity = ClarendonCourt) then begin
    QualifyingSalary := $12500;
    writeln('you have selected clarendon court!');
    readln(CQualSal);
  end
  else
    if(HousingCommunity = SangreGrandVillas)then begin
      QualifyingSalary := $9500;
      writeln('you have selected sangre grande villas!');
      readln(SQualSal);
    end
    else
    if HousingCommunity = ProvidenceGardens then begin
      QualifyingSalary :=$7500;
      writeln('you have selected providence gardens!');
      readln(CQualSal);
    end;

end.

首先,请注意阅读和遵循其逻辑更容易。这主要是 因为

  • 使用反映逻辑的布局(包括缩进块) 代码结构。

  • programbeginend等关键字使用一致的小写字母。 关键字通常是源代码中最不感兴趣的内容,它会分散注意力 让他们向你展示。

  • 避免从变量名中任意删除字符(例如" i" 第二个" a" "申请人"。在解释代码在慢速机器上运行的时代 可以说是一些理由,但不是更多的imo。同样,避免 变量名称中的下划线 - 不可否认,这更多是个人偏好,但是 除了申请人的名字之外,为什么你到处都使用它们?

其次,你还有很多工作要做。

  • 为工资(?)编号提供3个不同的变量,您会提示用户 对于3个社区中的每个社区,除非你愿意,否则可能是一个坏主意 随后想要同时处理所有3个数字。此外,您还没有提供文本提示来告诉用户要为readln(c_qual_sal) etc语句输入哪些信息。对我来说,你想要的是什么并不明显,所以我没有试过猜测。

  • 您回应用户选择社区的方式只是为您创建维护 头疼(如果你想在以后添加更多社区怎么办?)。会更好 有一个变量,你设置为任何一个社区名称匹配 用户输入的内容。

  • 您要为每个社区执行3个语句,这些语句是重复的 每个社区。你实际需要的唯一一个是QualifyingSalary - 无论输入的社区如何,其他人都可以执行。