Я пишу пользовательскую программу манипулирования структурой, и у меня есть следующие типы:
type
StrLen = 0..MaxLen;
Str = ^StrInst;
StrInst = record
length: StrLen;
data: array [StrPos] of char;
end;
Тогда у меня есть следующая процедура:
procedure ReadStr(var S: Str);
var pos: StrLen;
begin
S^.length:=0;
pos := 0;
writeln('pos before entering:',pos);
writeln;
with S^ do begin
repeat
Inc(pos);
Read(data[pos]);
until (ord(data[pos]) = 13) or (pos > MaxLen+1);
writeln('pos after entering:',pos);
length := pos-1;
end;
end;
Проблема в том, что когда я читаю второй объект этого типа, переменная pos и, следовательно, поле length таинственным образом увеличиваются на 1. Следующий код
ReadStr(S1);
ReadStr(S2);
выходы (когда я ввожу «123» в обоих случаях):
pos before entering:0
123
pos after entering:4
pos before entering:0
123
pos after entering:5
Буду очень рад, если кто-то прояснит для меня ситуацию. Заранее спасибо.