如何跳出循环嵌套??? ( 积分: 10 )

  • 主题发起人 主题发起人 wwq_80
  • 开始时间 开始时间
W

wwq_80

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序里面有一个循环嵌套
while (n>= 1) and (n<=stringlen) do
begin
repeat
hstr:= copy(strText, n, 1);
n:= n + 1;
If (n - 1) > stringlen Then
begin
hexdatalen:= hexdatalen - 1;
break;
end;
until not( hstr=' ');
repeat
................
until( );
n:=n+1;
end;
我想实现,当repeat中的if判断为真时直接跳出while循环,而不是跳出repeat循环,应该怎么做呢?谢谢
 
我的程序里面有一个循环嵌套
while (n>= 1) and (n<=stringlen) do
begin
repeat
hstr:= copy(strText, n, 1);
n:= n + 1;
If (n - 1) > stringlen Then
begin
hexdatalen:= hexdatalen - 1;
break;
end;
until not( hstr=' ');
repeat
................
until( );
n:=n+1;
end;
我想实现,当repeat中的if判断为真时直接跳出while循环,而不是跳出repeat循环,应该怎么做呢?谢谢
 
这个时候觉得goto挺好的,或者自己改现有结构
 
方法有3:

1:自己设个boolean类型变量做判断
key:boolean;
k:=false;
while (n>= 1) and (n<=stringlen) do
begin
repeat
hstr:= copy(strText, n, 1);
n:= n + 1;
If (n - 1) > stringlen Then
begin
key:=true;
hexdatalen:= hexdatalen - 1;
break;
end;
until not( hstr=' ');
if key then break;
repeat
................
until( );
n:=n+1;
end;

2:把这个嵌套循环放到一个独立的方法里,用exit直接退出该方法并继续执行该方法后面的指令
begin
......//前面的指令
proa;
......//后面的指令
end;


procedure proa;
begin
while (n>= 1) and (n<=stringlen) do
begin
repeat
hstr:= copy(strText, n, 1);
n:= n + 1;
If (n - 1) > stringlen Then
begin
hexdatalen:= hexdatalen - 1;
exit;
end;
until not( hstr=' ');
repeat
................
until( );
n:=n+1;
end;
end;

3:用goto


个人觉得第一个方法最正规,第2个和第3个方法推荐使用,第3个方法最好^_^

我也很喜欢goto
 
设个全局变量
B:boolean;
b:=true;
while (n>= 1) and (n<=stringlen) do
begin
repeat
hstr:= copy(strText, n, 1);
n:= n + 1;
If (n - 1) > stringlen Then
begin
hexdatalen:= hexdatalen - 1;
b:=false;
break;
end;
until not( hstr=' ');
if b=false then break; //这里加一句
repeat
................
until( );
n:=n+1;
end;
 
非常感谢大家,问题解决了!!!
 
我赞成用Goto的写法,并提供将跳出循环的工作放在主循环里面的写法

begin
while (n>= 1) and (n<=stringlen) do
begin
repeat
hstr:= copy(strText, n, 1);
n:= n + 1;
until not( (hstr=' ')and((n - 1) <= stringlen));
If (n - 1) > stringlen Then
begin
hexdatalen:= hexdatalen - 1;
break;
end;
repeat
................
until( );
n:=n+1;
end;
end;
 

Similar threads

I
回复
0
查看
763
import
I
I
回复
0
查看
843
import
I
I
回复
0
查看
547
import
I
后退
顶部