为什么在此处的if语句中期望序数表达式

时间:2019-06-19 15:00:28

标签: freepascal

我正在尝试编写一个函数,如果已发送行的任何字符的ascii值> 127(不可打印),则返回true:

function isBinary(line: string): boolean; 
begin
    result := false; 
    for c in line do 
        if (Ord(c) > 127) then 
            result := true; 
        end; 
end; 

但是,它给出了错误:

 Error: Ordinal expression expected

问题出在哪里,如何解决?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您显示的代码中至少有两个错误。

  1. 您没有声明循环变量c。您需要执行此操作,使用适合您代码中流行string类型的类型,而我们无法推断出这种类型。
  2. 您在代码中有一个begin语句,但是有两个end语句。 end个太多了。

即使修复此问题,此功能也不会测试任何东西是否为二进制。根据定义,string包含文本。而且,大量文本可以使用大于127的序数值进行编码。

此外,ASCII编码使用0到127之间的值(包括0和127),因此“ ascii value> 127”在术语上是矛盾的。

答案 1 :(得分:1)

免责声明:我正在写此答案,但不知道c的类型。

函数Ord具有以下原型:

function Ord(X: TOrdinal):LongInt;

这意味着它将序数类型作为参数。如果c的类型为char,则该函数可以正常运行,但是在您的代码中,end子句之后还有一个额外的if

编写函数的正确方法是:

function isBinary(line: string): boolean; 
begin
    result := false; 
    for c in line do 
        if (Ord(c) > 127) then 
            result := true; 
end; 

如果c不是char,则问题的原因现在变得很明显。