まず、書く必要があります
If (PlayerName = '') And (Length(PlayerName) > 10) Then
括弧は必須です。
次に、これは常にと評価されfalse
ます。これは、空で長さが 11 以上の文字列は存在しないためです。実際、文字列は長さがゼロの場合にのみ空であるため、基本的には「長さがゼロで、長さが 11 以上の場合は...」と言います。
ほとんどの場合、代わりに選言を使用したい、つまり の代わりに使用しor
たいand
:
If (PlayerName = '') Or (Length(PlayerName) > 10) Then
名前が空の場合、または名前が長すぎる場合、エラー メッセージが表示されます。
さらに、 ifはthen IndeedPlayerName
と等しいため、名前が無効であってもループは終了します。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;