Турбо Паскаль: проверить, содержит ли строка числа
Как сказано в названии, я не могу найти решение о том, как проверить, является ли строка PW
содержит номер или нет. Как я могу проверить в ТП, если строка PW
содержит цифру?
repeat
writeln;
writeln('Ok, please enter your future password.');
writeln('Attention: The Text can only be decoded with the same PW');
readln(PW);
pwLength:= Length(PW);
error:=0;
for i:= 1 to Length(PW) do begin
if Input[i] in ['0'..'9'] then begin
error:=1;
end;
end;
if Length(PW)=0 then
begin
error:=1;
end;
if Length(PW)>25 then
begin
error:=1;
end;
if error=1 then
begin
writeln('ERROR: Your PW has to contain at least 1character, no numbers and has to be under 25characters long.');
readln;
clrscr;
end;
until error=0;
1 ответ
Вот как бы я написал ваш код:
var
PW : String;
Error : Integer;
const
PWIsOk = 0;
PWIsBlank = 1;
PWTooLong = 2;
PWContainsDigit = 3;
procedure CheckPassword;
var
i : Integer;
begin
writeln;
writeln('Ok, please enter your future password.');
writeln('Attention: The Text can only be decoded with the same PW');
writeln('Your password must be between 1 and 25 characters long and contain no digits.');
repeat
error := PWIsOk;
readln(PW);
if Length(PW) = 0 then
Error := PWIsBlank;
if Error = PWIsOk then begin
if Length(PW) > 25 then
Error := PWTooLong;
if Error = 0 then begin
for i := 1 to Length(PW) do begin
if (PW[i] in ['0'..'9']) then begin
Error := PWContainsDigit;
Break;
end;
end;
end;
end;
case Error of
PWIsOK : writeln('Password is ok.');
PWIsBlank : writeln('Password cannot be blank.');
PWTooLong : writeln('Password is too long.');
PWContainsDigit : writeln('Password should not contain a digit');
end; { case}
until Error = PWIsOk;
writeln('Done');
end;
Вот некоторые вещи, на которые стоит обратить внимание:
Не используйте одно и то же значение кода ошибки для представления разных типов ошибок. Использование одного и того же значения для разных ошибок только затрудняет отладку кода, потому что вы не можете сказать, какой тест дал
Error
значение 1.Определите константы для представления различных типов ошибок. Таким образом, читатели не должны задаваться вопросом "Что означает 3" в
if error = 3 ...
После того, как вы обнаружили цифру в пароле, нет смысла проверять символы после него, поэтому
Break
в моемfor
петля.Если бы я был пользователем, меня бы раздражало, что мне не скажут, каковы правила, пока программа не скажет мне, что я сделал что-то не так. Скажите заранее, каковы правила использования.
На самом деле, было бы лучше включить дополнительную константу
Unclassified
со значением, скажем, -1, и начать каждую итерацию цикла, назначивError
к нему и, на последующих этапах, проверитьError = Unclassified
скорее, чемPWIsOk
,case
оператор - это аккуратный и легко поддерживаемый способ выбора одного из нескольких взаимоисключающих путей выполнения на основе порядкового значения.