함수매개변수 double배열 요소변경
조회수 899회
int main(void)
{
int a[2];
double b[2];
printf("첫 번째 사람 나이, 키 : \n");
scanf("%d%lf", &a[0], &b[0]);
printf("두 번째 사람 나이, 키 : \n");
scanf("%d%lf", &a[1], &b[1]);
swap("int", &a, &b);
swap("double", &a, &b);
printf("첫 번째 사람 나이, 키 : %d %.1lf\n", a[0], b[0]);
printf("두 번째 사람 나이, 키 : %d %.1lf\n", a[1], b[1]);
return 0;
}
void swap(char *type, int* a[], double* b[])
{
double *dtmp;
int* tmp;
if (strcmp(type, "int") == 0)
{
tmp = a[0];
a[0] = a[1];
a[1] = tmp;
}
else if (strcmp(type, "double") == 0)
{
dtmp = b[0];
b[0] = b[1];
b[1] = dtmp;
}
}
첫 번째 : 22 187.5 두 번째 : 44 165.4 이렇게 초기화 했을때 함수실행시키고 나서 나이값은 바뀌는데 키값은 바뀌지 않습니다. 어떤게 문제인지 모르겠습니다ㅠ.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
#include <stdio.h> #include <string.h> void swap(char *type, int* a, double* b) /* 기본 char로 문자열 "int" 나 "double"을 매개변수로 받을수 없기때문에, 매개변수 타입을 char* 로 변경 */ { double dtmp; int tmp; /* tmp 변수를 포인터로 지정하면 같은 대상을 가르키게 되기때문에, swap을 할 수없게 된다. 그러므로 값만 임시저장하기 위해서 지역변수 int,double로 설정 */ if (strcmp(type, "int") == 0) { tmp = *a; a[0] = a[1]; a[1] = tmp; // tmp를 일반변수로 바꿈에 따라 swap 구문 수정 } else if (strcmp(type, "double") == 0) { dtmp = *b; b[0] = b[1]; b[1] = dtmp; } } int main(void) { int a[2]; double b[2]; printf("첫 번째 사람 나이, 키 : \n"); scanf("%d%lf", &a[0], &b[0]); printf("두 번째 사람 나이, 키 : \n"); scanf("%d%lf", &a[1], &b[1]); swap("int", a, b); swap("double", a, b); printf("첫 번째 사람 나이, 키 : %d %.1lf\n", a[0], b[0]); printf("두 번째 사람 나이, 키 : %d %.1lf\n", a[1], b[1]); return 0; }
코드 정상 작동되도록 일부수정했고, 수정내역은 코드내 주석으로 달아드렸습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력