728x90
1. 함수 포인터와 switch 문 사용
#include <stdio.h>
#include <string.h>
// 함수 정의
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }
void functionC() { printf("Function C\n"); }
enum FunctionName { A, B, C, UNKNOWN };
// 함수 이름을 열거형 값으로 변환
enum FunctionName getFunctionName(const char *name) {
if (strcmp(name, "A") == 0) return A;
if (strcmp(name, "B") == 0) return B;
if (strcmp(name, "C") == 0) return C;
return UNKNOWN;
}
int main() {
char input[50];
printf("Enter function name: ");
scanf("%s", input);
switch (getFunctionName(input)) {
case A: functionA(); break;
case B: functionB(); break;
case C: functionC(); break;
default: printf("Unknown function\n");
}
return 0;
}
2. 조건문과 함수 매핑
#include <stdio.h>
#include <string.h>
// 함수 정의
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }
int main() {
char funcName[50];
printf("Enter the function name: ");
scanf("%s", funcName);
if (strcmp(funcName, "functionA") == 0) {
functionA();
} else if (strcmp(funcName, "functionB") == 0) {
functionB();
} else {
printf("Function not found.\n");
}
return 0;
}
3. 함수 포인터와 배열 사용
#include <stdio.h>
#include <stdlib.h>
// 함수 정의
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }
void functionC() { printf("Function C\n"); }
// 함수 포인터 배열
void (*functions[3])() = {functionA, functionB, functionC};
int main() {
int choice;
printf("Enter the function index (0-2): ");
scanf("%d", &choice);
if (choice >= 0 && choice < 3) {
(*functions[choice])();
} else {
printf("Invalid index.\n");
}
return 0;
}
4. 명령 패턴 사용
#include <stdio.h>
#include <string.h>
typedef struct Command {
void (*execute)();
} Command;
void functionA() { printf("Function A\n"); }
void functionB() { printf("Function B\n"); }
Command createCommand(void (*func)()) {
Command cmd;
cmd.execute = func;
return cmd;
}
int main() {
char funcName[50];
printf("Enter the command name (A/B): ");
scanf("%s", funcName);
Command cmd;
if (strcmp(funcName, "A") == 0) {
cmd = createCommand(functionA);
} else if (strcmp(funcName, "B") == 0) {
cmd = createCommand(functionB);
} else {
printf("Invalid command.\n");
return 1;
}
cmd.execute();
return 0;
}
728x90