함수매개변수 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;
    }
    

    코드 정상 작동되도록 일부수정했고, 수정내역은 코드내 주석으로 달아드렸습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)