我正在尝试制作一个(非常)小代码来确定给定变量x是数字还是字母。必须手工完成,不需要类型(x) - 假设在Pascal中有这样的东西 - 。
我的计划是验证x不是一个一个的数字,然后我写了这个:
(*let ischar be a boolean and let x be a letter or a number.*)
for i:=0 to 9 do
begin
if (x=i) then
ischar = false;
end;
if ischar then
write('x is a number!');
else
write('x is a letter');
如果x是一个字母,我希望测试“x = i”会返回false,但是由于以下错误,我甚至无法编译:“得到char,期望long int”。似乎我无法比较x和我,我知道但是我认为在那种情况下如果会返回假。 还有另一种方法可以“手工”吗?
答案 0 :(得分:4)
通常不可能直接比较不同类型的变量。编译错误表明x
被声明为char
,而i
是longint
。
可用选项可能取决于您使用的Pascal编译器 我唯一的经验是Borland(后来的CodeGear和Embarcadero)产品“Turbo Pascal”和“Delphi”。
这些编译器具有ord
函数,该函数给出了序数类型的数值。
对于char
,ord
函数应该为您提供字符的ASCII代码,您可以测试它是否在代码范围'0'..'9'中。
您不需要for
循环。这应该有效:
if (ord(x)<48) or (ord(x)>57) then ischar:=true else ischar:=false;
编辑:这是ord
函数的Free Pascal文档:
http://www.freepascal.org/docs-html/rtl/system/ord.html