An equivalent to jump/goto ?

85 ビュー (過去 30 日間)
Olivier
Olivier 2012 年 10 月 26 日
コメント済み: Walter Roberson 2018 年 1 月 7 日
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
Walter Roberson 2018 年 1 月 7 日
Mauro Alejandro Pereira comments to Loginatorist:
This is not a solution.
Walter Roberson
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
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:

その他の回答 (3 件)

Jan
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
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
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

Walter Roberson
Walter Roberson 2012 年 10 月 26 日
  2 件のコメント
Jan
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
Walter Roberson 2012 年 10 月 27 日
As long as it isn't ALTER! Single worst programming feature I've ever seen!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by