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

时间:2014-07-28 11:09:59

标签: range pascal freepascal lazarus delphi

我试图找出将使用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语句snipet中的“in”而没有任何运气 有一次我尝试做if (user_age = 1..12) then并且它只给了我一个错误,编译器声明该语句正在等待')',但它找到了..而不是。我对FPC非常陌生,所以非常感谢帮助和提示。

3 个答案:

答案 0 :(得分:6)

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

大多数PC帕斯卡仅支持最多256个元素的设置大小,因此josifoski推荐的解决方案将更长期实用。

答案 1 :(得分:3)

if(user_age >=1)和(user_age <=12)然后

答案 2 :(得分: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