我使用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.
答案 0 :(得分:0)
in
用于测试集合中元素的存在。这里设置的是一组char,因此要测试的元素也必须是char。在您的示例中,您测试的元素是一些字符串(UCase
,LCase
和Num
),这些字符串会导致错误消息。
您必须使用长度为一的Ucase
和LCase
切片,或者您也可以直接使用单个字符(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.