错误:运算符未过载

时间:2016-01-24 08:07:58

标签: validation syntax error-handling pascal pascalscript

我使用Free Pascal创建了一个简单的代码块来验证ID编号,例如输入的Abc123。

当我尝试运行该程序时,我收到一条错误消息,说“操作员没有超载”在它所说的位置,

 IF not (Ucase in Upper) or (Lcase in Lower) or (Num in Int) then

特别是出现“in”的地方。 有没有人知道为什么会出现错误以及我可以做些什么来解决它?

谢谢!

Program CheckChar;

VAR
UserID, LCase, UCase, Num : String;
readkey : char;
L  : Integer;


CONST
Upper = ['A'..'Z'];
Lower = ['a'..'z'];
Int   = ['0'..'9'];

Begin
Write('Enter UserID ');Readln(UserID);
Ucase := Copy(UserID,1,1);
LCase := Copy(UserID,2,1);
Num   := Copy(UserID,3,2);
L     := Length(UserID);

  While L = 6 Do
  Begin
    IF not (Ucase in Upper) or (Lcase in Lower) or (Num in Int) then
    Begin
    Writeln('Invalid Input');
    End;
 Else
   Writeln('Input is valid');

  End;

 readln(readkey);
 End.

1 个答案:

答案 0 :(得分:0)

in用于测试集合中元素的存在。这里设置的是一组char,因此要测试的元素也必须是char。在您的示例中,您测试的元素是一些字符串(UCaseLCaseNum),这些字符串会导致错误消息。

您必须使用长度为一的UcaseLCase切片,或者您也可以直接使用单个字符(astring[index]),而不是使用Copy进行复制。

此外,您的while循环完全没用。你必须只测试6个字符,所以让我们展开循环而不是放弃一些复杂性,而你只是开始学习。

最后,正确编写检查器的一种方法是:

Program CheckChar;
var
  UserID  : string;
  readkey : char;
  L  : Integer;
  invalid: boolean;

const
  Upper = ['A'..'Z'];
  Lower = ['a'..'z'];
  Int   = ['0'..'9'];

begin
  Write('Enter UserID ');
  Readln(UserID);
  L := length(UserId);

  if L <> 6 then invalid := true
  else
  begin
    invalid :=  not (UserID[1] in Upper) or // take a single char, usable with in
                not (UserID[2] in Lower) or // ditto
                not (UserID[3] in Lower) or // ditto
                not (UserID[4] in Int) or // ditto
                not (UserID[5] in Int) or // ditto
                not (UserID[6] in Int); // ditto
  end;

  if invalid then
    Writeln('Invalid Input')
  else
   Writeln('Input is valid');

 readln(readkey);
end.