为什么在这里的 if 语句中需要序数表达式

Why ordinal expression expected in if statement here

我正在尝试编写一个函数,如果发送行的任何字符的 ascii 值 > 127(不可打印),该函数 returns 为真:

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

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

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

  1. 您没有声明循环变量c。您需要这样做,在您的代码中使用适合当前 string 类型的类型,我们无法推断。
  2. 您的代码中有一个 begin 语句,但是有两个 end 语句。那是 end 太多了。

即使你修复了这个问题,这个函数也不会测试任何东西是否是二进制的。 string 根据定义保存文本。并且可以使用大于 127 的序数值对大量文本进行编码。

此外,ASCII 编码使用 0 到 127 之间的值,因此 "ascii value > 127" 在术语上有些矛盾。

免责声明: 我写这个答案时不知道 c.

的类型

函数Ord具有以下原型:

function Ord(X: TOrdinal):LongInt;

这意味着它采用序数类型作为参数。如果 cchar 类型,那么该函数可以完美运行,但在您的代码中,您在 if 子句之后有一个额外的 end

函数的正确写法是:

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

如果 c 不是 char,那么问题的原因现在就很明显了。