我正在尝试找出将使用 Free Pascal case 语句的示例传递给简单 if 语句的正确方法。
使用案例是
begin usingCaseStatements;
var
user_age : Integer;
begin
Writeln('Please enter your age');
Readln(user_age);
case user_age of
1..12 : Writeln('You are too young');
else
Writeln('Invalid input');
end;
Writeln('Please any key to terminate the program');
Readln();
end.
-----使用 if 语句--------
begin usingCaseStatements;
var
user_age : Integer;
begin
Writeln('Please enter your age');
Readln(user_age);
if user_age in 1..12 then
Writeln('You are too young')
else
Writeln('Invalid input');
Writeln('Please any key to continue');
Readln();
end.
我尝试替换 if 语句片段中的“in”,但没有任何运气 有一次我尝试做
if (user_age = 1..12) then
,但它只给了我一个错误,编译器指出该语句正在等待')',但它发现了..。我对 FPC 非常陌生,因此非常感谢您提供帮助和提示。
IN 测试集合,而不是范围。正如 TLama 已经评论的那样,您可以使用 [1..12] 定义包含范围的集合。
大多数 PC Pascal 仅支持最多 256 个元素的集合大小,因此 josifoski 推荐的解决方案从长远来看将更加实用。
如果(
user_age >=1
)和(user_age <=12
)那么
只是为了好玩。它可以在 FPC 2.7.1 上运行,但我不知道它是否可以在稳定的 2.6.4 上运行
program project1;
{$modeswitch typehelpers}
type
TIntegerHelper = type helper for Integer
function IsInRange(const ALow, AHigh: Integer): Boolean; inline;
end;
function TIntegerHelper.IsInRange(const ALow, AHigh: Integer): Boolean; inline;
begin
Result := (Self >= ALow) and (Self <= AHigh);
end;
var
i: Integer;
begin
i := 8;
Writeln(i.IsInRange(7, 9));
Writeln(i.IsInRange(8, 8));
Writeln(i.IsInRange(2, 3));
Readln;
end.
输出:
TRUE
TRUE
FALSE
语句
if user_age in 1..12 then
非常符合 Ada 语法。
Free Pascal 相当接近:if user_age in [1..12] then
这是一个简单的可编译示例:
Program inRange;
var
int1 : integer = 45;
begin
if int1 in [4..200] then
writeln('int1 is between 4 and 200')
else
writeln('int1 is not between 4 and 200')
end.