2016-01-24 93 views
0

我已经使用Free Pascal创建了一个简单的代码块来验证正在输入的Abc123等ID号。错误:运算符未超载

当我尝试运行该程序,我得到一个错误的说法,“算不算超载”,在那里说了点,

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

“中的”显示具体在哪里了。 有没有人有任何想法为什么发生错误,我可以做些什么来解决它?

谢谢!

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

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

你必须使用的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. 
+0

哦......我不是太肯定的运营商,“中”是如何工作的。我之所以包含while循环,是为了在其他任何事情之前检查长度,但现在我发现它确实是多余的。非常感谢! –