C言語のswitch文で質問があります。
switch文の中にif文とelse if文がある記述を見たのですが、
これが何をしたいのか分かりません。
switch文:式と同じものを比較して探す
if文とelse if:もし条件式が真なら処理1を、偽なら処理2を行う
という認識です。
処理速度は違うようですが、
同じ条件で同じ処理ができるものだと思っていたのでわざわざ入れ子にする意味が分かりませんでした。
調べてみてもあまりない記述方法なのか解答を得られませんでした。
お力を貸していただけないでしょうか。よろしくお願いいたします。
P.S.
C言語を勉強し始めてまだ日が浅いため、
お手間をお掛けしてしまい申し訳ありませんが、
初心者にも分かりやすいようなご回答をいただけますと助かります。
なにとぞよろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/06 11:02
2019/05/07 10:56
回答3件
0
ベストアンサー
条件分岐が入れ子になることは普通に起こり得ることです。ifの中にifとかswitchの中でさらにswitchということもざらにありえます。
もっとも、仰るとおり統合できることもあります。それは状況次第なのでケースバイケースです。
投稿2019/05/06 11:19
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/07 11:09
2019/05/07 11:16
2019/05/07 12:18
2019/05/07 12:33
2019/05/07 12:48
2019/05/07 12:53 編集
2019/05/07 14:26
2019/05/08 05:38
2019/05/08 11:52
2019/05/08 11:54
2019/05/08 12:06
2019/05/08 12:14
2019/05/08 12:18
2019/05/09 01:07
2019/05/12 11:19
0
よい例題が難しいのですが・・・。(あまりいい例ではなくて申し訳ない)
例えば、車に関する処理で、メーカが豊田・日産・本田とそれ以外のメーカで処理を分け、また、分けたもので、年式が2010年間までと2010年以降の車で処理を分けたいとします。
そのときは、下記のように書くのが自然です。
C
1switch (メーカ) 2{ 3case 豊田: 4case 日産: 5case 本田: 6 if (年式 < 2010) 7 { 8 豊田か日産か本田の2010年年式より古い車の処理 9 } 10 else 11 { 12 豊田か日産か本田の2010年年式以降の車の処理 13 } 14 break; 15 16default: 17 if (年式 < 2010) 18 { 19 豊田か日産か本田以外の2010年式より古い車の処理 20 } 21 else 22 { 23 豊田か日産か本田以外の2010年年式以降の車の処理 24 } 25 break; 26}
全部、if 文で書くならば
C
1if ((メーカ == 豊田) || 2 (メーカ == 日産) || 3 (メーカ == 本田)) 4{ 5 if (年式 < 2010) 6 { 7 豊田か日産か本田の2010年年式より古い車の処理 8 } 9 else 10 { 11 豊田か日産か本田の2010年年式以降の車の処理 12 } 13 break; 14} 15else 16{ 17 if (年式 < 2010) 18 { 19 豊田か日産か本田以外の2010年式より古い車の処理 20 } 21 else 22 { 23 豊田か日産か本田以外の2010年年式以降の車の処理 24 } 25 break; 26}
これは、慣れた人には見にくい・・・。
全部、switch 文で書くならば・・・。
C
1switch (メーカ) 2{ 3case トヨタ: 4case 日産: 5case 本田: 6 switch (年式) 7 { 8 書けない 9 } 10 break; 11 12default: 13 switch (年式) 14 { 15 書けない 16 } 17 break; 18}
書けない。
投稿2019/05/08 00:14
総合スコア1638
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/08 04:25
2019/05/08 04:46
2019/05/08 04:58
2019/05/08 05:09
2019/05/08 12:59 編集
2019/05/08 12:05
2019/05/08 12:42
2019/05/08 12:53
2019/05/08 13:59
2019/05/08 17:31
2019/05/08 22:52
2019/05/09 01:49
2019/05/09 02:25
2019/05/12 11:23
0
私は条件分岐が3つを超えるようならswitch文を使うようにしています。
またswitch文でもcase以下の処理が膨れ上がるようであれば、
関数テーブルにまとめてしまいます。
投稿2019/05/08 11:59
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。