혼자 공부하는 C언어 15챕터 도전실전예제
문제
프로필 교환 프로그램
두 명의 나이와 키를 입력한 후에 바꾸어 출력합니다. 단, 나이와 키를 바꾸는 함수는 int형과 double형을 모두 교환할 수 있도록 하나의 함수로 구현하세요. 다음의 swap 함수 호출 예를 참고하여 작성합니다.
swap("int", &a, &b);
swap("double", &a, &b);
풀이과정: void* 를 이용하면 자료형에 관계없이 가져올 수 있다.
#include <stdio.h>
void swap(char* data_type, void* number1, void* number2);
void main(void) {
int first_age, second_age;
double first_height, second_height;
printf("첫 번째 사람의 나이와 키 입력 : ");
scanf("%d %lf", &first_age, &first_height);
printf("두 번째 사람의 나이와 키 입력 : ");
scanf("%d %lf", &second_age, &second_height);
swap("int", &first_age, &second_age);
swap("double", &first_height, &second_height);
printf("첫 번째 사람의 나이와 키 : %d, %.1lf\n", first_age, first_height);
printf("두 번째 사람의 나이와 키 : %d, %.1lf\n", second_age, second_height);
return 0;
}
void swap(char* data_type, void* number1, void* number2) {
if (data_type == "int") {
int temp;
temp = *(int*)number1;
*(int*)number1 = *(int*)number2;
*(int*)number2 = temp;
}
// *(int*)number1 -> (int*)number1 으로 void* number1을 int* number1로 바꾼다음
// 앞에 *을 붙여 포인터를 이용한 swap을 구현하도록 한다.
else if (data_type == "double") {
double temp;
temp = *(double*)number1;
*(double*)number1 = *(double*)number2;
*(double*)number2 = temp;
}
}