2편 [버퍼와 입출력]

Lee Jong In·2024년 9월 8일
0
post-thumbnail

아래 코드를 실행해보자

의도: 사용자로 부터 문자를 두번 입력받아 출력하기

#include <stdio.h>
int main(void) {
    char ch1,ch2;
    
    // 의도: 첫번째 문자 입출력
    printf("Enter the first character. \n");
    scanf("%c",&ch1);
    printf("First character is %c.\n",ch1);
    
    // 의도: 두번째 문자 입출력
    printf("Enter the second character. \n");
    scanf("%c",&ch2);
    
    printf("Second character is %c.\n",ch1);
    return 0;
}

그러나 아래와 같이 실제로 사용자는 문자를 한번만 입력했음에도 출력은 두번 된다....

실행 모습

분명히 'A'만 입력한 상황인데 프로그램이 종료되었다,,,

원인: 입력버퍼

우리가 키보드를 통해 값을 입력하면 어떠일이 벌어질까?

'A'를 입력을 위해 입력한 "엔티키('\n')" 이 입력 버퍼에 남게 되고 ch2에 들어가게 된다.
최종적으로
"Second character is 줄바꿈." 가 출력되게 된다.

해결 방법: 입력버퍼 비우기

getchar(); 를 통해 입력버퍼에서 '\n'을 비워낼수 있다.
입력버퍼를 비웠기 때문에 아래 코드는 이제 우리의 의도대로 정상작동한다.

#include <stdio.h>

int main(void) {

    char ch1,ch2;

    // 의도: 첫번째 문자 입출력
    printf("Enter the first character. \n");
    scanf("%c",&ch1);
    printf("First character is %c.\n",ch1);

    // 버퍼 비우기
    getchar();

    // 의도: 두번째 문자 입출력
    printf("Enter the second character. \n");
    scanf("%c",&ch2);
    printf("Second character is %c.\n",ch2);
    return 0;
}

정상 작동 모습

profile
BackEnd 공부 중인 학부생

0개의 댓글