Во-первых, вам нужно написать
If (PlayerName = '') And (Length(PlayerName) > 10) Then
Требуются круглые скобки.
Во-вторых, всегда оценивается как false
, потому что нетСтрока, которая является пустой и имеет длину 11 или более.Действительно, строка пуста тогда и только тогда, когда ее длина равна нулю, поэтому в основном вы говорите: «Если длина равна нулю, а длина равна 11 или более, то ...».
Скорее всего, вы хотите вместо этогоиспользовать дизъюнкцию, то есть использовать or
вместо and
:
If (PlayerName = '') Or (Length(PlayerName) > 10) Then
Это отобразит сообщение об ошибке, если имя пустое или , если оно слишкомlong.
Кроме того, цикл завершится, даже если имя неверно, потому что если PlayerName
равно ThisIsATooLongName
, то действительно PlayerName <> ''
.
Что вам нужно, это что-токак
Function GetValidPlayerName : String;
Var
PlayerName : String;
Begin
Repeat
Readln(PlayerName);
If (PlayerName = '') Or (Length(PlayerName) > 10) Then
Begin
Write('That was not a valid name. Please try again: ');
PlayerName := '';
End;
Until PlayerName <> '';
GetValidPlayerName := PlayerName;
End;
или
Function GetValidPlayerName : String;
Var
PlayerName : String;
Begin
result := '';
Repeat
Readln(PlayerName);
If (PlayerName = '') Or (Length(PlayerName) > 10) Then
Write('That was not a valid name. Please try again: ')
Else
result := PlayerName;
Until result <> '';
End;