检查数字是否在 free pascal 的范围内

问题描述 投票:0回答:4

我正在尝试找出将使用 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 非常陌生,因此非常感谢您提供帮助和提示。

range pascal freepascal lazarus delphi
4个回答
6
投票

IN 测试集合,而不是范围。正如 TLama 已经评论的那样,您可以使用 [1..12] 定义包含范围的集合。

大多数 PC Pascal 仅支持最多 256 个元素的集合大小,因此 josifoski 推荐的解决方案从长远来看将更加实用。


3
投票

如果(

user_age >=1
)和(
user_age <=12
)那么


1
投票

只是为了好玩。它可以在 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

0
投票

语句

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.
© www.soinside.com 2019 - 2024. All rights reserved.