repeat循环中遇到很奇怪的现象 ( 积分: 50 )

  • 主题发起人 主题发起人 雪球
  • 开始时间 开始时间

雪球

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,k:integer;
instring:string;
Tarray:array [1..100] of string;
x:array[1..100] of real ;
begin
instring:=memo1.text;
j:=1;
i:=1;
k:=1;
repeat
n:=pos(' ',instring);
tarray[j]:=copy(instring,1,n-1);
delete(instring,1,n);
j:=j+1;
until instring='';
memo3.Text:=inttostr(j);
repeat
x[k]:=strtofloat(tarray);
k:=k+1;
i:=i+1;
until i=j;
n:=1;
for n:=1 to j do
begin
series1.AddXY(x[n],x[n+2]);
end;

end;

end.
j值总是为102,似乎进入了死循环,可是又在j=102时跳了出来,程序不能顺利完成,清高手指点
而且有那么十分钟,这个程序是正常运行的。
 
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,k:integer;
instring:string;
Tarray:array [1..100] of string;
x:array[1..100] of real ;
begin
instring:=memo1.text;
j:=1;
i:=1;
k:=1;
repeat
n:=pos(' ',instring);
tarray[j]:=copy(instring,1,n-1);
delete(instring,1,n);
j:=j+1;
until instring='';
memo3.Text:=inttostr(j);
repeat
x[k]:=strtofloat(tarray);
k:=k+1;
i:=i+1;
until i=j;
n:=1;
for n:=1 to j do
begin
series1.AddXY(x[n],x[n+2]);
end;

end;

end.
j值总是为102,似乎进入了死循环,可是又在j=102时跳了出来,程序不能顺利完成,清高手指点
而且有那么十分钟,这个程序是正常运行的。
 
n:=pos(' ',trim(instring));
 
// 写代码时请注意大小写,这样看起来会好点,
// 好的代码是从基础做起的
repeat
n:=pos(' ',instring);
if n <> 0 then
begin
tarray[j]:=copy(instring,1,n-1);
delete(instring,1,n);
end
else
begin
TArray[j] := InString;
Delete(InString, 1, Length(Instring));
end;


j:=j+1;
until instring='';
 
to whbchy
还是102 ,没有作用啊
 
你的代码有好大的问题
repeat
n:=pos(' ',instring); // 如 : InString := 'ILOVEYOU'; 没有空格的
// n 就会 = 0
tarray[j]:=copy(instring,1,n-1);
// TArray[j] := Copy('ILOVEYOU', 1, -1);
delete(instring,1,n);
// Delete('ILOVEYOU', 1, 0); 什么也没有删除到 InString 的值不变
// 这样绝对是一个死的循环来的,为什么会到102退出,还未想明(不好意思了)
j:=j+1;
until instring='';
 
灾情比较严重,好象你要求在meno1中输入123.456 789.01 654.32若干用空格分割的数据
但你必须在输入数据的最后再输入一个空格,否则我的例子将取得654.32不包含空格
delete(instring,1,0);造成死循环,所以要解决的是n:=pos(' ',instring);当n=0时的解决方法

repeat
n:=pos(' ',instring);//**************你必须在输入数据的最后再输入一个空格
tarray[j]:=copy(instring,1,n-1);
delete(instring,1,n);
j:=j+1;
until instring='';

建议你修改输入方式,在循环体中加入Form1.caption:=instring诸如此类的语句
 
TO gooodlife 因为输入的数字本来就是中间加空格的,所以不会出现你所说的问题。
TO tswhq奇怪的就是我在后面加了空格也是循环到102退出阿,而且这样做有的时候运行是正常的,所以才很奇怪。不知道是怎么回事。
 
TO goodlife:谢谢,问题解决,想给你加五十分以前没用过怎么加阿,直接选接受答案并为。。加上50点积分就可以了吗?如果没有加上请联系我
 
后退
顶部