为什么在这里的 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
问题出在哪里,如何解决?谢谢你的帮助。
您显示的代码中至少有两个错误。
- 您没有声明循环变量
c
。您需要这样做,在您的代码中使用适合当前 string
类型的类型,我们无法推断。
- 您的代码中有一个
begin
语句,但是有两个 end
语句。那是 end
太多了。
即使你修复了这个问题,这个函数也不会测试任何东西是否是二进制的。 string
根据定义保存文本。并且可以使用大于 127 的序数值对大量文本进行编码。
此外,ASCII 编码使用 0 到 127 之间的值,因此 "ascii value > 127" 在术语上有些矛盾。
免责声明: 我写这个答案时不知道 c
.
的类型
函数Ord具有以下原型:
function Ord(X: TOrdinal):LongInt;
这意味着它采用序数类型作为参数。如果 c
是 char
类型,那么该函数可以完美运行,但在您的代码中,您在 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
,那么问题的原因现在就很明显了。
我正在尝试编写一个函数,如果发送行的任何字符的 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
问题出在哪里,如何解决?谢谢你的帮助。
您显示的代码中至少有两个错误。
- 您没有声明循环变量
c
。您需要这样做,在您的代码中使用适合当前string
类型的类型,我们无法推断。 - 您的代码中有一个
begin
语句,但是有两个end
语句。那是end
太多了。
即使你修复了这个问题,这个函数也不会测试任何东西是否是二进制的。 string
根据定义保存文本。并且可以使用大于 127 的序数值对大量文本进行编码。
此外,ASCII 编码使用 0 到 127 之间的值,因此 "ascii value > 127" 在术语上有些矛盾。
免责声明: 我写这个答案时不知道 c
.
函数Ord具有以下原型:
function Ord(X: TOrdinal):LongInt;
这意味着它采用序数类型作为参数。如果 c
是 char
类型,那么该函数可以完美运行,但在您的代码中,您在 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
,那么问题的原因现在就很明显了。