0から始めるVisualStudio2022:ソフト開発塾

おまけ
プログラミングを考えるうえで、学習しておく点が前のページにいくつかある。
まず、メインプログラムは、
データを5件保管し、
重複するキーデータを保管しようとして、失敗させる
1件削除し、
1件追加している。
MAX5件のデータを保存するだけなら
C_sample007 mm_data[5];
とするだけでもいいし、
クラスを使わず、
struct {
char *m_key;
char *data1;
int data2;
}mm_data[5];
としても、可能である。MAXの制限が可能であれば、5をその制限まで増やせばいい。
また、クラスを使わず制限をなくしたい場合、
struct samp007 {
char *m_key;
char *m_data1;
int m_data2;
void * m_next;
}mm_data;
の様にすれば、可能で
	struct samp007 {
		char* m_key;
		char* m_data1;
		int	m_data2;
		void* m_next;
	} mm_data,*ptr;
	ptr = &mm_data;
	ptr->m_next = malloc(sizeof(struct samp007)); 
	ptr = (struct samp007*)ptr->m_next;
	ptr->m_key = (char*)"0001";
	ptr->m_data1 = (char*)"AAAAA A1A1A1";
	ptr->m_data2 = 9001;
	ptr->m_next = malloc(sizeof(struct samp007));
	ptr = (struct samp007*)ptr->m_next;
	ptr->m_key = (char*)"0002";
	ptr->m_data1 = (char*)"BBBBB B2B2B2";
	ptr->m_data2 = 8002;
	ptr->m_next = malloc(sizeof(struct samp007));
	ptr = (struct samp007*)ptr->m_next;
	ptr->m_key = (char*)"0003";
	ptr->m_data1 = (char*)"CCCCC C3C3C3";
	ptr->m_data2 = 7003;
	ptr->m_next = malloc(sizeof(struct samp007));
	ptr = (struct samp007*)ptr->m_next;
	ptr->m_key = (char*)"0004";
	ptr->m_data1 = (char*)"DDDDD D4D4D4";
	ptr->m_data2 = 6004;
	ptr->m_next = malloc(sizeof(struct samp007));
	ptr = (struct samp007*)ptr->m_next;
	ptr->m_key = (char*)"0005";
	ptr->m_data1 = (char*)"EEEEE E5E5E5";
	ptr->m_data2 = 5005;
	ptr->m_next = NULL;

	ptr = &mm_data;
	for (; ptr->m_next;) {
		ptr = (struct samp007*)ptr->m_next;
		printf("[%s][%s][%d]\n", ptr->m_key, ptr->m_data1, ptr->m_data2);
	}
となる。
また、同じようなadditemを作成した場合
struct samp007 {
	char* m_key;
	char* m_data1;
	int	m_data2;
	void* m_next;
} ;

int samp007_additem(struct samp007 * ptr, char* mp_key, char* mp_data1, int mp_data2) {
	for (; ptr->m_next;) {
		ptr = (struct samp007*)ptr->m_next;
		if (strcmp(ptr->m_key, mp_key) == 0) {
			return 0;
		}
	}
	ptr->m_next = malloc(sizeof(struct samp007));
	ptr = (struct samp007*)ptr->m_next;
	ptr->m_key = mp_key;
	ptr->m_data1 = mp_data1;
	ptr->m_data2 = mp_data2;
	ptr->m_next = NULL;
	return 1;
}
int main() {
	struct samp007 mm_data, * ptr;
	mm_data.m_next = NULL;
	samp007_additem(&mm_data, (char*)"0001", (char*)"AAAAA A1A1A1", 9001);
	samp007_additem(&mm_data, (char*)"0002", (char*)"BBBBB B2B2B2", 8002);
	samp007_additem(&mm_data, (char*)"0003", (char*)"CCCCC C3C3C3", 7003);
	samp007_additem(&mm_data, (char*)"0004", (char*)"DDDDD D4D4D4", 6004);
	samp007_additem(&mm_data, (char*)"0005", (char*)"EEEEE E5E5E5", 5005);
	// すべてのデータ表示		
	ptr = &mm_data;
	for (; ptr->m_next;) {
		ptr = (struct samp007*)ptr->m_next;
		printf("[%s][%s][%d]\n", ptr->m_key, ptr->m_data1, ptr->m_data2);
	}
	// 重複するKEYデータの保管
	int rc = samp007_additem(&mm_data, (char*)"0003", (char*)"XXXXXX X9X9X9", 9900);
	if (rc) {
		printf("保管成功\n");
	}
	else {
		printf("保管失敗\n");
	}
	return 0;
}
となる。
データ構造が100種類あった場合、どちらも(struct | class)100種類のadditemを作成することになるのだが
データと関数additemは、対である。
samp001_additem(&mm_data001,
samp002_additem(&mm_data002,
samp003_additem(&mm_data003,
samp004_additem(&mm_data004,
と書くか
mm_data001.additem(
mm_data002.additem(
mm_data003.additem(
mm_data004.additem(
と書くか

無理にクラスを使う必要はないが
クラスを上手く使いこなそう。
おまけ その2





Top 0070に戻る