使用 if .. then 或 if .. then .. else,在条件成立时执行对应代码。 和 C 系语言不同:Pascal 的条件表达式不需要用括号包裹。
var
A: Integer;
B: boolean;
begin
// 条件成立仅执行单条语句,无需 begin end
if A > 0 then
DoSomething;
// 条件成立要执行多条语句,必须用 begin end 包裹成代码块
if A > 0 then
begin
DoSomething;
AndDoSomethingMore;
end;
// 单语句 if-else 结构
if A > 10 then
DoSomething
else
DoSomethingElse;
// 和上面代码逻辑完全等价:把判断结果存入布尔变量再使用
B := A > 10;
if B then
DoSomething
else
DoSomethingElse;
end;Code language: JavaScript (javascript)
else 匹配规则
else 会和离它最近、尚未匹配 else 的 if 绑定。 下面这段代码逻辑符合预期:
if A <> 0 then
if B <> 0 then
AIsNonzeroAndBToo
else
AIsNonzeroButBIsZero;Code language: HTML, XML (xml)
这里的 else 属于内层 if B <> 0。
上面这种无代码块包裹的嵌套 if 语法合法,但可读性差。 推荐用 begin … end 把内层嵌套整体包裹,代码逻辑边界清晰;就算缩进排版混乱,阅读者也能一眼分清归属,修改增删分支时更不容易写出 bug。
优化规范写法:
if A <> 0 then
begin
if B <> 0 then
AIsNonzeroAndBToo
else
AIsNonzeroButBIsZero;
end;Code language: HTML, XML (xml)
- if 后面的判断条件不用括号(C/C++/Java 必须加括号,Pascal 相反);
- then 后只有一行代码:可省略
begin end;多行代码必须包裹; else就近匹配内层 if,嵌套建议强制加块消除歧义;- 比较表达式(如
A>10)可直接赋值给布尔变量。
下面是一个可运行的例子:分数评级完整示例
逻辑规则:
- ≥90 → A
- ≥80 且 <90 → B
- ≥60 且 <80 → C
- <60 → D
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ScoreLevel;
var
score: Integer;
begin
Write('请输入考试分数:');
ReadLn(score);
if score >= 90 then
Writeln('等级:A')
else if score >= 80 then
Writeln('等级:B')
else if score >= 60 then
Writeln('等级:C')
else
Writeln('等级:D');
ReadLn;
end.Code language: PHP (php)
编译后运行
请输入考试分数:96
等级:A
程序会提示你输入分数,输入后,会输出等级。
非英文下面可能会乱码,可以增加这句:{$codepage utf8}
也可以把等级获取封装成一个函数。
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ScoreLevelFunc;
function GetLevel(s: Integer): string;
begin
if s >= 90 then
Result := 'A'
else if s >= 80 then
Result := 'B'
else if s >= 60 then
Result := 'C'
else
Result := 'D';
end;
var
score: Integer;
begin
Write('Your score:');
ReadLn(score);
Writeln('Your level:', GetLevel(score));
ReadLn;
end.Code language: PHP (php)

Previous: 函数、过程与基础原生类型
Next: 逻辑、关系与按位运算符