비주얼 스튜디오 콘솔 문제

조회수 537회
int oddCheck(int *param) {
    for (int i = 0; i < 10; i++) {
        if (param[i] % 2 == 1) {
            printf("%d ", param[i]);
        }
    }
    printf("\n");
}

int evenCheck(int *param) {
    for (int i = 0; i < 10; i++) {
        if (param[i] % 2 == 0) {
            printf("%d ", param[i]);
        }
    }
    printf("\n");
}



int main(void) 
{   
    int *numArray[10];
    int num;

    for (int i = 0; i < 10; i++) {
        printf("intput : ");
        scanf_s("%d\n", &num);
        numArray[i] = num;
    }
    oddCheck(numArray);
    evenCheck(numArray);
}

코드를 이런식으로 짰는데 코드 자체에는 문제가 없는데 디버그 콘솔에서

printf("intput : ");

위와 같은 부분을 두번째 실행에서 제대로 출력을 못하네요. 마지막 부분도 마찬가지로 input이 한번 추가로 나오는 문제도 있구요. 이유는 어째선지 모르지만 마지막은 나오지 않아야 할 부분인데 나와서 그런지 제가 입력한 11이라는 정수도 씹히구요. 덕분에 프로그램은 멀쩡하게 돌아가는데 보기 상당히 불쾌합니다 ㅠㅠ

이미지

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    에러 뜨지 않던가요? 이대로 컴파일이 되고 동작을 하나요?

    int *numArray[10];

    는 2차원으로 인식됩니다. 정확히 얘기하자면, entity 10개의 integer에 대한 pointer들의 모음으로 생각됩니다.

    int numArray[10] = {0};

    으로 하시면 됩니다. = {0}은 없어도 크게 상관 없지만 일단 지역변수니 해주면 좀 더 좋습니다.

    한편 oddCheck, evenCheck 함수는 int return으로 되어있는데 return 값을 명시하든지, 아니면 그냥 void 형으로 사용하셔야 합니다.

    또한 scanf 함수는 그 특성상 "%d\n"을 받을 때, 숫자만 받으면 저절로 \n을 입력하는 것이 아니고 \n까지 입력해야 한 입력이 끝납니다. 그래서 동작이 중간에 어긋나게 된 거죠. 만약 다음 행으로 넘어가는 것을 구현하고 싶으시다면,

    #include <stdio.h>
    #include <stdlib.h>
    
    using namespace std;
    void oddCheck(int *param) {
        for (int i = 0; i < 10; i++) {
            if (param[i] % 2 == 1) {
                printf("%d ", param[i]);
            }
        }
        printf("\n");
    }
    
    void evenCheck(int *param) {
        for (int i = 0; i < 10; i++) {
            if (param[i] % 2 == 0) {
                printf("%d ", param[i]);
            }
        }
        printf("\n");
    }
    
    
    
    int main(void)
    {
        int numArray[10] = {0};
        int num;
    
        for (int i = 0; i < 10; i++) {
            printf("intput : ");
            scanf_s("%d", &num);
            numArray[i] = num;
        }
        oddCheck(numArray);
        evenCheck(numArray);
        return 0;
    }
    

    와 같이 하면 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 답변이 오랫동안 달리지 않아서 한참 뒤에나 확인했네요! 당시 C 언어를 공부하던 초기여서 부적합한 코드가 많이 보입니다 ㅎㅎ 알려주셔서 감사합니다 Will-Big 2020.5.7 18:47

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

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

(ಠ_ಠ)
(ಠ‿ಠ)