Filter löschen
Filter löschen

switch文で同じ​処理を複数のcase​で実行したい

108 Ansichten (letzte 30 Tage)
mayu
mayu am 16 Mär. 2023
Kommentiert: mayu am 16 Mär. 2023
タイトル通りなのですが、switch文で複数のcaseで同じ処理を実行したいと思っています。
やりかたをググってマトラボのページは見つけられなかったのですが、C言語のページでイメージと似たものがあったので、
●switch文で複数のcaseで同じ処理を実行する
マネして書いてみたところ、
switch abcde
case 'A'
case 'B'
~ ABの場合に処理したい内容 ~
・・・
実行したら、Aが無視されていました。
switch abcde
case 'A'
~ ABの場合に処理したい内容 ~
case 'B'
~ ABの場合に処理したい内容 ~
・・・
と分けて書いたらできますが、無駄な感じがするのでやっぱりまとめたいです。
●switch caseのヘルプページ
もみていたのですがこのパターンが見当たらず、どう直したら実行されるのかわからなくて質問をさせていただきました。
わかる方がいらっしゃいましたら、お手数をおかけいたしますがご教示いただけますと幸いです。
どうぞよろしくお願いいたします。

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 16 Mär. 2023
>switch文で複数のcaseで同じ処理を実行 ⇒ その事をフォールスルーと呼びます。
MATLABはSwitch文がフォールスルーしない言語の為、いずれか一つのcase文しか通りません。
for abcde = 'ABC'
fprintf('abcde = ''%c''\n',abcde);
switch abcde
case 'A'
disp('~ abcde==''A'' の場合に処理したい内容 ~');
case 'B'
disp('~ abcde==''B'' の場合に処理したい内容 ~');
otherwise
disp('~ その他の場合 ~')
end
end
abcde = 'A'
~ abcde=='A' の場合に処理したい内容 ~
abcde = 'B'
~ abcde=='B' の場合に処理したい内容 ~
abcde = 'C'
~ その他の場合 ~
>どう直したら実行されるのか
下記の様な書き方で実行可能です。比較対象を複数個に出来ます。ドキュメントには下記の通り記載されています。
  • switch_expression は、スカラーまたは文字ベクトルでなければなりません
  • case_expression は、スカラー、文字ベクトル、またはスカラーか文字ベクトルの cell 配列でなければなりません。
for abcde = 'ABC'
fprintf('abcde = ''%c''\n',abcde)
switch abcde
case {'A','B'} % case_expression を文字ベクトルの cell 配列にする
disp('~ abcde==''A'' または abcde==''B''の場合に処理したい内容 ~');
otherwise
disp('~ その他の場合 ~')
end
end
abcde = 'A'
~ abcde=='A' または abcde=='B'の場合に処理したい内容 ~
abcde = 'B'
~ abcde=='A' または abcde=='B'の場合に処理したい内容 ~
abcde = 'C'
~ その他の場合 ~
  1 Kommentar
mayu
mayu am 16 Mär. 2023
早々にありがとうございます!教えていただいた通りにしたらできました(>_<)
ヘルプにも記載があったのですね・・・(*_*; 
マトラボのヘルプ、いつも探し出せなかったり内容を読み解けなかったりしているのですが、私にもわかるように詳しく教えていただき、とても有難いです。
これも使いたい場面が多くありそうなのでうれしいです。ありがとうございました( ◠‿◠ )

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!