Pascal比较错误

时间:2014-05-15 13:41:42

标签: pascal

我的简单Pascal代码有问题。 (我刚开始学习Pascal。)

所以这是一个年龄比较代码,然后通过代码可以看到休息。

program Test;
uses crt;
var
  age : real;
Begin

writeln('Enter your age: ');
readln(age);
if age>18 then
if age<100 then
Begin
clrscr;
textcolor(lightgreen);
writeln('Access Granted');
end
else
if age<18 then
Begin
clrscr;
textcolor(lightred);
writeln('ACCESS DENIED');
writeln('Reason:You are way to young');
end
else
Begin
clrscr;
textcolor(lightred);
writeln('ACCESS DENIED');
writeln('Reason:You are way to old');
end;
readln;
end.

当我输入一个低于18的值作为年龄时,我希望程序回复:

ACCESS DENIED
Reason:You are way to young

但我没有得到任何输出。为什么呢?

1 个答案:

答案 0 :(得分:3)

有时文字缩进会帮助您查看问题。这是你添加缩进的代码:

program Test;
uses crt;
var
  age : real;
Begin
  writeln('Enter your age: ');
  readln(age);
  if age>18 then
    if age<100 then
    Begin
      clrscr;
      textcolor(lightgreen);
      writeln('Access Granted');
    end
    else
      if age<18 then
      Begin
        clrscr;
        textcolor(lightred);
        writeln('ACCESS DENIED');
        writeln('Reason:You are way to young');
      end
      else
      Begin
        clrscr;
        textcolor(lightred);
        writeln('ACCESS DENIED');
        writeln('Reason:You are way to old');
      end;
  readln;
end.

为了使实现的逻辑更加明显,我现在将代表嵌套的if而没有它们执行的代码:

  if age>18 then
    if age<100 then
      ...  // Access Granted
    else
      if age<18 then
        ...  // You are way too young
      else
        ...  // You are way too old
  ;

现在很容易看到标记为You are way too young的分支从未到达。它应该在age小于18时执行,但if语句嵌套到另一个if中,只有在age大于18时才会调用它。因此,age应首先符合大于18,然后小于18才能执行该分支 - 您现在可以看到为什么没有得到预期的结果!

预期的逻辑可能以这种方式实现:

  if age>18 then

    if age<100 then
      ...  // Access Granted
    else  // i.e. "if age >= 100"
      ...  // You are way too old

  else  // now this "else" belongs to the first "if"

    ...  // You are way too young

  ;

我相信你应该能够正确填写丢失的代码块。

最后一个注意事项:您可能希望将age>18更改为age>=18,以便18个本身不符合“太年轻”的条件。