我的简单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
但我没有得到任何输出。为什么呢?
答案 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个本身不符合“太年轻”的条件。