連続した「else if」から抜ける処理は

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者ですみません

連続した「else if」から抜ける処理は

#1

投稿記事 by 初心者ですみません » 4年前

下記の連続したif文の処理を実行させたいのです。
「どれかの条件が成立し「実行」が成された時点で
 この連続したこのif文から抜ける」
ですが、continue文はループ専用だし、break文は{}から抜けるだけだしで、
どうすれば狙い通りの処理になりますか?

コード:

if(条件式1)
{
    条件式1が成立したとき実行
}
else if(条件式2)
{
    (条件式1が成立せず)条件2が成立したとき実行
}
else if(条件式3)
{
    (条件式1と条件式2が成立せず)条件式3が成立したとき実行
}
else if(条件式4)
{
    (条件式1と条件式2と条件式3が成立せず)条件式4が成立したとき実行
}
else
{
    条件式1も2も3も4も成立しないときの実行部分 
}

→どれかの条件が実行された時点で、ここに処理が飛ぶ


Math

Re: 連続した「else if」から抜ける処理は

#2

投稿記事 by Math » 4年前

普通それだけで”そうなる"でしょう!

>continue文はループ専用だし、break文は{}から抜けるだけだしで、
>どうすれば狙い通りの処理になりますか?

continue、break はいいらないよ。

条件式1~4 が排他的でないとか 複雑でないかぎり if 文は普通にそうなるよ。

具体例を書いてみれば?

Math

Re: 連続した「else if」から抜ける処理は

#3

投稿記事 by Math » 4年前

まず フローチャートをかくこと。
これが基本中の基本でっせ!。

フローチャートがprogramになるのがスクラッチ。ひらがな表記もかのうで保育園年長組から塾があって
動画作成可能で、イベント・ドリブンでC言語+DXライブラリーより便利。上は大学院・実用まで耐えます。

来年から小学生必須になるプログラミング すでに我々が習っていることをリョウガしてますえ。

box
記事: 2002
登録日時: 13年前

Re: 連続した「else if」から抜ける処理は

#4

投稿記事 by box » 4年前

合ってますよ。
何か具体的な(つまりコンパイル~実行ができる)コードを書いてみては?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Math

Re: 連続した「else if」から抜ける処理は

#5

投稿記事 by Math » 4年前

if文 は while, do~while, for(;;) とちがって ループしないぜ。

ほっておいてもぬけだすよ。

terry_savarin

Re: 連続した「else if」から抜ける処理は

#6

投稿記事 by terry_savarin » 4年前

>この連続したこのif文から抜ける

質問に書かれている、if文とelse文とを組み合わせた

「条件が△なら処理の△を行い、処理が□なら処理の□を行い・・・、どれも該当しなければ処理の☆を行う」

という構造は、全体で一つの流れとなっています。


「if文から抜ける」という考えは、goto文を使ったプログラミングの仕方から抜け切れていないのだと思いますが、gotoを使わない構造化プログラミングに慣れるべきです。

ただし、プログラミングを共同作業しているグループ(会社など)の内規次第では、終了処理やエラー処理へのgoto文の使用を認めている場合もあります。
この質問で「if文から抜け」出た先にあるのが、終了処理だけならば、許されるかも。


なお、望ましくないプログラム構造を生んでまでも「if文から抜けたい」と思わせる理由が、今のプログラムの書き方の中に、問題点として何かあるかもしれません。
なぜ、抜けたいと思いましたか?

テリー・サバラン

Re: 連続した「else if」から抜ける処理は

#7

投稿記事 by テリー・サバラン » 4年前

誤記訂正です。


誤記:
条件が△なら処理の△を行い、処理が□なら処理の□を行い・・・

訂正:
条件が△なら処理の△を行い、条件が□なら処理の□を行い・・・

テリーサバラン

Re: 連続した「else if」から抜ける処理は

#8

投稿記事 by テリーサバラン » 4年前

どうしても「if文から抜ける」イメージのプログラミングをしたいなら、switch文を使う方法もあります。
その場合、if-else文で示されていた、どの部分の処理をすることになるかを判定し、それに応じた整数を返す関数を事前に実行し、リターン値をスイッチ用変数にセットすることが必要です。
事前に実行せず、switch(式)の代わりにswitch(関数)と書くこともできますが、一般的な書き方ではありません(※)。

※.「一般的な書き方ではない」は、「switch文の式に関数を使った解説は、なかなか見つからない」ことに起因する、個人の見解です。「これこれの理由により、書くべきではない」という資料は、見つかっていません。

コード:

num= 条件1から4までを判定して整数1から4または0をリターンする関数;
switch(num) {
        case 1:
            条件式1が成立したときの処理;
            break;
        case 2:
            条件式1が成立せず、条件2が成立したときの処理;
            break;
        case 3:
           条件式1と条件式2が成立せず、条件式3が成立したときの処理;
            break;
        case 4:
           条件式1と条件式2と条件式3が成立せず、条件式4が成立したときの処理;
            break;
       default:
          条件式1も2も3も4も成立しないときの処理;;
    }
    breakやdefaultの後は、ここに処理が飛ぶ

テリー・サバラン

Re: 連続した「else if」から抜ける処理は

#9

投稿記事 by テリー・サバラン » 4年前

誤記訂正です。


誤記:
条件式1も2も3も4も成立しないときの処理;;

訂正:
条件式1も2も3も4も成立しないときの処理;

Math

Re: 連続した「else if」から抜ける処理は

#10

投稿記事 by Math » 4年前

なるほど
https://gabekore.org/syntax-sugar
こういう考えからかんちがいしたかもね。
(この場合のシンタックスシュガーは本来の使い方ではないですね)

返信

“C言語何でも質問掲示板” へ戻る