배열 공부하다가 막힌건데 이 코딩에서 어디가 틀렸나요???

조회수 712회

길이가 10인 배열을 선언하고 10개의 정수를 입력받아 홀수 짝수를 구분 지어 출력하는 소스인데 실행을 해보았는데 원하는대로 뜨지 않아서 이렇게 질문드립니다 ㅠㅠ 어디가 틀렸는지 알려주실 수 있나요?

'''
 #include<stdio.h>
 void odd(int * ptr)
 {
         int i;
         int arr[sizeof(ptr)/sizeof(int)];
        printf("홀수 출력: ");
     for(i=0;i<sizeof(ptr)/sizeof(int);i++)
      {
        if(ptr[i]%2==1)
        {
            arr[i]=ptr[i];
        }
      }
    for(i=0;i<sizeof(ptr)/sizeof(int);i++)
    {
        if(arr[i+1]=='\0')
        {
            printf("%d",ptr[i]);
            break;
        }
        else
        {
            printf("%d, ",ptr[i]);
        }
    }
}

void even(int *ptr)
{
    int i;
    int arr[sizeof(ptr)/sizeof(int)];
    printf("짝수 출력: ");
    for(i=0;i<sizeof(ptr)/sizeof(int);i++)
    {
        if(ptr[i]%2==0)
        {
            arr[i]=ptr[i];
        }
    }
    for(i=0;i<sizeof(ptr)/sizeof(int);i++)
    {
        if(arr[i+1]=='\0')
        {
            printf("%d",ptr[i]);
            break;
        }
        else
        {
            printf("%d, ",ptr[i]);
        }
    }
}

int main(void)
{
    int arr[10];
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d번째 정수 입력: ",i+1);
        scanf("%d\n",&arr[i]);
    }
    odd(arr);
    printf("\n");
    even(arr);
return 0;
}
  • odd()와 even()에 똑같은 for 조건문이 두 번 사용되는데 이유가 있나요? 이렇게 재사용되는 코드가 오동작을 흔히 일으킵니다. 그리고 원했던 결과와 실제 결과를 구체적으로 알려주실 수 있나요? 엽토군 2018.8.10 14:13
  • C는 일단 잘 모르지만, odd,even함수에서 int arr[sizeof(ptr)/sizeof(int)]; 이게 일단 size가 2가 잡혀요.그리고 main에서 arr을 *ptr로 넘겨줬기 때문에 ptr[i]이런식의 접근은 잘못된거 같아요. 배열 포인터는 맨앞을 가르키기 때문에 *(ptr+i)와 같은 접근으로 하셔야 될거같습니다. 딱 보기엔 이정도 보이네요. 심승현 2018.8.10 14:36
  • "배열을 선언하고 홀수 짝수를 구분 지어 출력하는" js 소스를 짜보았습니다. 참고하세요. https://codepen.io/yuptogun/pen/XBoEmP 엽토군 2018.8.10 14:53

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

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

(ಠ_ಠ)
(ಠ‿ಠ)