if文とswitch文の違い(区別?)につきまして

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

if文とswitch文の違い(区別?)につきまして

#1

投稿記事 by ムンバ » 16年前

こんばんはっ!

どちらをどの様な時にどの様に使ったらいいのか解らないので、ご意見お願い致します。^^;
if (cat.flag == 1){
			
			/*if (cat.muki == 0)
				cat.y++;
			else if (cat.muki == 1)
				cat.x--;
			else if (cat.muki == 2)
				cat.x++;
			else if (cat.muki == 3)
				cat.y--;*/
			
			switch (cat.muki){
				case 0: cat.y++; break;
				case 1: cat.x--; break;
				case 2: cat.x++; break;
				case 3: cat.y--; break;

				default: break;
			}
		}
この様なソースの場合、if文とswitch文の、どちらを使うのがいいのでしょうか?
どちらでも、コンパイルして実行すると同じ動きをするのです。^^;

このソースは、switch文を使ってる場合なので、if文を/* */でコメントしてます。

宜しくお願い致します。<_ _>

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#2

投稿記事 by ムンバ » 16年前

言葉が足りなくて、すみません。

今、猫を主人公にしてRPGを作りたいと思ってます。
ですので、「猫」が構造体となってますので、「cat」を使ってます。
(猫でもわかる・・・とは関係ない事だという事です。^^;)
宜しくお願いします!

-----------------------------------------------------------------------------------------
編集にて追加です。
龍神録プログラミングの館→プロジェクトと素材を用意しよう→http://dixq.net/rp/img/1/5.png
の直下
「今後章ごとにダウロードしたファイル」
誤字かと思われます。(謝
-----------------------------------------------------------------------------------------

Libra

Re:if文とswitch文の違い(区別?)につきまして

#3

投稿記事 by Libra » 16年前

自分はこの場合におけるifとswitchは見やすさの違いだと思いました。


#include <stdio.h>

#define DOWN 0
#define RIGHT 1
#define LEFT 2
#define UP 3

typedef struct CAT{
int flag;
int muki;
int x,y;
}Cat_t;
int main(void){
	Cat_t cat;
	
	cat.flag = 1 ;
	cat.muki = DOWN ;
	cat.x = 200 ;
	cat.y = 200 ;
	
	if (cat.flag == 1){
		switch ( cat.muki ){
		case DOWN:	cat.y++;break;
		case LEFT: 	cat.x--; break;
		case RIGHT:	cat.x++; break;
		case UP:	cat.y--; break;
		default: break;
		}
	}
	
	printf("x = %d y = %d ", cat.x , cat.y ) ;
	return 0;
}
私はこの場合であればdefineとswitchを使って、分けた方が見やすいと思いました。

BEMANI

Re:if文とswitch文の違い(区別?)につきまして

#4

投稿記事 by BEMANI » 16年前

比較の回数が違うのでは・・・と思いました。

array

Re:if文とswitch文の違い(区別?)につきまして

#5

投稿記事 by array » 16年前

私もこれは、謎に思ってました。
自分なりの解釈では、処理速度の違いだと思ってます。
----------- if文の場合 -----------

if (cat.muki == 0)
	cat.y++;
else if (cat.muki == 1)
	cat.x--;
else if (cat.muki == 2)
	cat.x++;
else if (cat.muki == 3)
	cat.y--;

if文の場合、もし「else if (cat.muki == 3)」まで一致しなかったら、4回判定する事になります。

cat.muki=「0」でもない「1」でもない「2」でもない「3」でもない、だと処理が長いです・・・


----------- switch文の場合 -----------
switch (cat.muki){
	case 0: cat.y++; break;
	case 1: cat.x--; break;
	case 2: cat.x++; break;
	case 3: cat.y--; break;
	default: break;
}

switch文だと、if文と違って「cat.mukiは何と一致するか」を判定してると思います。

cat.muki=「何と一致するか」のみで、処理は短いはず・・・。
------ 結果 ------
結論は、switch文を使った方が良いと思われます。



----追記
判定じゃなくて比較ですね。

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#6

投稿記事 by ムンバ » 16年前

Libraさん、早速のご解説ありがとうございます。

Key[KEY_INPUT_DOWN]
Key[KEY_INPUT_LEFT]
Key[KEY_INPUT_RIGHT]
Key[KEY_INPUT_UP]

の部分

#define DOWN KEY_INPUT_DOWN
#define LEFT KEY_INPUT_LEFT
#define RIGHT KEY_INPUT_RIGHT
#define UP KEY_INPUT_UP



Key[DOWN]
Key[LEFT]
Key[RIGHT]
Key[UP]

の様な感じで宜しいでしょうか?

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#7

投稿記事 by ムンバ » 16年前

BEMANIさん、arrayさん、ご解説ありがとうございます。

if文だと4回、switch文だと5回・・・何となく解ります。^^;

自分が好きな方で、うまく動作する方を選んだ方がいいということですかね?(汗

BEMANI

Re:if文とswitch文の違い(区別?)につきまして

#8

投稿記事 by BEMANI » 16年前

沢山条件分岐が出るのであれば、switchの方が早いです。
ifはとりあえず、条件が何であれ比較します。

switchは switch(値)・・・
この「値」をみて、該当する「case 値」にジャンプするので比較の回数が少ないです。

もし、御時間が許されているのであれば、

cat.muki = 3; という値を入れて、
if文 と switch~case をれぞれ一行一行にブレイクポイントをうち、デバッグしてみてください。
上にも書いてますが、ifはとりあえず、条件に合うまで比較します。
switchは、case ? にすぐ飛んでいきます。

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#9

投稿記事 by ムンバ » 16年前

うっ!比較ですね。<_ _>

すごく悩んでたので助かりました。
どうもありがとうございました。(謝

BEMANI

Re:if文とswitch文の違い(区別?)につきまして

#10

投稿記事 by BEMANI » 16年前

ただ、見やすさというのは非常に重要なので、その辺りも考慮してあげて下さい^^
一概にswitchの方がいい! とは言い難いので;
二・三個程度の比較ならif文で十分ではないかな~と思います^^

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#11

投稿記事 by ムンバ » 16年前

BEMANIさん、ありがとうございます!

今日は、眠くて自爆ですみません。^^;
起きたら、試してみます。(謝

皆さんのご解説のスレッド保存して
今後、読み返しながら勉強したいと思います。

ずっと悩んでいた事なので助かりました。
どうもありがとうございました。(謝

編集で追加です。
switch文を使った方が自分なりに見た目もカッコいい~♪
的な感じで、いいのでしょうかね?^^
どうもありがとうございました。<_ _>

Libra

Re:if文とswitch文の違い(区別?)につきまして

#12

投稿記事 by Libra » 16年前

> if文だと4回、switch文だと5回・・・何となく解ります。^^;
>
自分もそう思ってました。同じなら見やすさの問題かなと。
勉強になります。m(_ _)m

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#13

投稿記事 by ムンバ » 16年前

こちらこそ、勉強になります。^^
重ね重ね、どうもありがとうございました。(謝

Justy

Re:if文とswitch文の違い(区別?)につきまして

#14

投稿記事 by Justy » 16年前

 参考までに。

メモリ効率の向上 : Y's Software Library
ttp://ww4.tiki.ne.jp/~yosshie-k/programming/techniques/memory.html#if_or_switch

ムンバ

Re:if文とswitch文の違い(区別?)につきまして

#15

投稿記事 by ムンバ » 16年前

ttp://ww4.tiki.ne.jp/~yosshie-k/programming/techniques/memory.html
こっ これは・・・。(激汗
Justyさん、ありがとうございます。^^
お気に入りに登録です!

ありがとうございました。おやすみなさい♪

閉鎖

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