do while 문에서 입력받는 프로그램, 한 번은 되는데 그 다음이 이상함.

조회수 529회
#include <stdio.h>

int main(void)
{
    char ch;
    int x, y;
    int result;

    printf("*****************\n");
    printf("A--- Add\n");
    printf("S--- Subtract\n");
    printf("M--- Multiply\n");
    printf("D--- Divide\n");
    printf("Q--- Quit\n");
    printf("*****************\n");

    do
    {
        repeat :
        printf("연산을 선택하시오: ");
        ch = getchar();
        printf("두수를 공백으로 분리하여 입력하시오: ");
        scanf_s("%d %d", &x, &y);

        if (ch == 'A')
            result = x + y;
        else if (ch == 'S')
            result = x - y;
        else if (ch == 'M')
            result = x * y;
        else if (ch == 'D')
            result = x / y;
        else if (ch == 'Q')
            break;
        else
            goto repeat;

        printf("%d\n", result);

    } while (1);

    return 0;
}

이미지

첫번째 실행은 "연산을 선택하시오" , "두수를 공백으로 분리하여 입력하시오." 가 정상적으로 출력되는데, 두번째 실행부터 이상하네요, 왜 저렇게 한 번에 출력될까요?

1 답변

  • int main(void)
    {
        char ch;
        int x, y;
        int result;
    
        printf("*****************\n");
        printf("A--- Add\n");
        printf("S--- Subtract\n");
        printf("M--- Multiply\n");
        printf("D--- Divide\n");
        printf("Q--- Quit\n");
        printf("*****************\n");
    
        do
        {
        repeat:
            printf("연산을 선택하시오: ");
            //ch = getchar();
            while (1) {
                ch = getchar();
    
                if (ch != '\n')
                    break;
            }
    
            printf("두수를 공백으로 분리하여 입력하시오: ");
            scanf_s("%d %d", &x, &y);
    
            if (ch == 'A')
                result = x + y;
            else if (ch == 'S')
                result = x - y;
            else if (ch == 'M')
                result = x * y;
            else if (ch == 'D')
                result = x / y;
            else if (ch == 'Q')
                break;
            else
                goto repeat;
    
            printf("%d\n", result);
    
    
        } while (1);
    
        return 0;
    }
    

    첫 번째 getchar()와 scanf_s()를 하고 나서 입력 버퍼에 '\n'이 flush되지 않고 남아 있다가 두 번째 getchar()가 실행될 때 사용자 입력 전에 입력이 되어서 발생하는 문제로 \n은 버리도록 수정을 하니 정상 동작합니다. 도움이 되셨길 바랍니다.

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

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

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

(ಠ_ಠ)
(ಠ‿ಠ)