1
私はカスタム構造操作プログラムを書いている、と私は、次のタイプを持っている:パスカル - 神秘的なフィールドの増加
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;
問題は、そのタイプの2番目のオブジェクトであるがという変数を読み込んで、の長さがフィールドになると、不思議な増加が1つ発生しています。次のコード
のReadStr(S1);
ReadStr(S2);
出力(いずれの場合も、I入力 '123'):誰かが私のために状況をクリアした場合
pos before entering:0
123
pos after entering:4
pos before entering:0
123
pos after entering:5
は、非常にgladfulなります。前もって感謝します。
私はどんなファイルも読んでいません。入力は構造体のフィールドに読み込まれます。 – Arnthor
@ Nordvind - あなたは価値観を読んでいるが、これはもっともらしい説明であるようだ。テストは簡単で、'13 'を' 10 'に切り替えて見てください。最初の要素をスキップしていますが、' Inc 'と' Read 'の場所を切り替えることになります。 –
@Sertac Akyuz: 'Read'は' Inc'の前に来なければならないと思っていましたが、配列が 'data:array [StrPos] of char'として定義されていて、' StrPos'が0から始まる "StrLen"の代わりに誤ってOPを挿入している可能性がありますが、0から始まるインデックスの範囲です。 –