An equivalent to jump/goto ?
81 次查看(过去 30 天)
显示 更早的评论
Hello all,
I would like to jump between my loops whole/for. I know that I can use the command break, but it doesn't work in this situation.
There is the architecture of my code :
while (condition1)
Action1
while (Condition2)
Action2
for i=1:N
if (Condition3)
Action3
%Goto second While loop
elseif (Condition4)
Action4
%Goto first While loop
end
end
end
end
Is it possible to do these 'Goto' with Matlab ? or an equivalent ?
Thanks.
3 个评论
Walter Roberson
2018-1-7
Mauro Alejandro Pereira:
Notice that Loginatorist's remark was posted as a Comment, not as an Answer. Individual Comments are for discussion, and need not be solutions.
采纳的回答
Sean de Wolski
2012-10-26
The MATLAB equivalent is to use functions that you call when you want to go somewhere else.
This is explained in the documentation for function, available here:
0 个评论
更多回答(3 个)
Jan
2012-10-26
编辑:Jan
2012-10-26
Only a small change solves the problem:
while (condition1)
Action1
Proceed = true;
while (Condition2 && Proceed)
Action2
for i=1:N
if (Condition3)
Action3
%Goto second While loop
break; % <==
elseif (Condition4)
Action4
%Goto first While loop
Proceed = false; % <==
break; % <==
end
end
end
end
This is very similar to Matt Fig's solution, only the test of his bf is embedded in the condition of the WHILE.
1 个评论
Matt Fig
2012-10-26
编辑:Matt Fig
2012-10-26
Yep. I use this similar construct too. Which one I choose depends on what I am doing. When translating old FORTRAN code, or when I am working with a FORTRAN programmer, (both occur frequently in my line of work) I am more likely to use my approach. When writing from scratch I am likely to use the one Jan shows.
Matt Fig
2012-10-26
编辑:Matt Fig
2012-10-26
There has been a feature request for quite some time to allow BREAK to have a level passed to it. Perhaps add your name to the chorus of voices requesting such a feature. Until then, use this kind of thing....
cnt1 = 1;
cnt2 = 1;
while cnt1<10
disp('In first loop')
bf = 0; % Break flag for throwing back to first loop
cnt1 = cnt1 + 1;
while cnt2<10
disp('In second loop')
cnt2 = cnt2 + 1;
for i=1:20
if cnt2<5
cnt2 = cnt2 + 1;
disp('breaking back to 2nd loop')
break
%Goto second While loop
elseif cnt1<5
disp('breaking back to 1st loop')
cnt1 = cnt1 + 1;
bf = 1; % set flag to go to first loop
break
end
end
if bf % break out of second loop when set
break
end
end
end
0 个评论
Walter Roberson
2012-10-26
2 个评论
Jan
2012-10-27
As usual I cannot hesitate to publish my hopes, that Matlab will get a COMEFROM in the future also.
Walter Roberson
2012-10-27
As long as it isn't ALTER! Single worst programming feature I've ever seen!
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!