Error : Operator is not overloaded

Error : Operator is not overloaded

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

当我尝试 运行 程序时,我收到一条错误消息,指出 "Operator is not overloaded" 在它指出

的地方
 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.

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

你必须使用长度为 1 的 UcaseLCase 的切片,或者你也可以直接使用单个字符 (astring[index]) 而不是用 [=18= 复制].

另外,您的 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.