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に戻る