switchテーブル化

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

switchテーブル化

#1

投稿記事 by ktjpn » 8年前

こんばんは。プログラム初心者です。C言語の学習中です。

以下のソースをテーブル化したいと思っています。
いろいろなサイトで実装方法を参考に試行錯誤したのですが、
思った通りの動作にならず、質問をさせていただきました。

以下ソースをテーブル化したい場合どのような感じになるでしょうか?

コード:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int main(){
	int inData;
	int min = 0;
	int max = 5;

	srand((unsigned int)time(NULL));
	inData = rand() % 10;
	bunki(inData);

	return 0;
}

int bunki(int inData)
{
	switch(inData)
	{
	case 0 :
		printf("inDataは0です。");
		break;
	case 1 :
		printf("inDataは1です。");
		break;
	case 2 :
		printf("inDataは2です。");
		break;
	case 3 :
		printf("inDataは3です。");
		break;
	case 4 :
		printf("inDataは4です。");
		break;
	case 6 :
		printf("inDataは6です。");
		break;
	case 7 :
		printf("inDataは7です。");
		break;
	case 8 :
		printf("inDataは8です。");
		break;
	case 9 :
		printf("inDataは9です。");
		break;
	default :
		break;
	}
	return 0;
}
よろしくお願いいたします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: switchテーブル化

#2

投稿記事 by h2so5 » 8年前

min, maxはどこで使っているのでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: switchテーブル化

#3

投稿記事 by みけCAT » 8年前

こんな感じでしょうか?

コード:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int bunki(int inData);

int main(void){
	int inData;
	int min = 0;
	int max = 5;

	srand((unsigned int)time(NULL));
	inData = rand() % 10;
	bunki(inData);

	return 0;
}

int bunki(int inData)
{
	static const char* message[10] = {
		"inDataは0です。",
		"inDataは1です。",
		"inDataは2です。",
		"inDataは3です。",
		"inDataは4です。",
		NULL,
		"inDataは6です。",
		"inDataは7です。",
		"inDataは8です。",
		"inDataは9です。"
	};

	if(0 <= inData && inData != 5 && inData <= 9)
	{
		printf(message[inData]);
	}

	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: switchテーブル化

#4

投稿記事 by みけCAT » 8年前

もしくは、関数ポインタを使うのでしたら

コード:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int bunki(int inData);

int main(void){
	int inData;
	int min = 0;
	int max = 5;

	srand((unsigned int)time(NULL));
	inData = rand() % 10;
	bunki(inData);

	return 0;
}

void bunki0(void)
{
	printf("inDataは0です。");
}

void bunki1(void)
{
	printf("inDataは1です。");
}

void bunki2(void)
{
	printf("inDataは2です。");
}

void bunki3(void)
{
	printf("inDataは3です。");
}

void bunki4(void)
{
	printf("inDataは4です。");
}

void bunki6(void)
{
	printf("inDataは6です。");
}

void bunki7(void)
{
	printf("inDataは7です。");
}

void bunki8(void)
{
	printf("inDataは8です。");
}

void bunki9(void)
{
	printf("inDataは9です。");
}

int bunki(int inData)
{
	static void (*syori[10])(void) = {
		bunki0,
		bunki1,
		bunki2,
		bunki3,
		bunki4,
		NULL,
		bunki6,
		bunki7,
		bunki8,
		bunki9
	};

	if(0 <= inData && inData != 5 && inData <= 9)
	{
		syori[inData]();
	}

	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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