본문 바로가기
프로그래밍 기초/C++

getchar()

by junsday 2016. 11. 11.

비주얼 스튜디오를 써 본 사람이라면 컴파일을 할 때 f5 또는 ctrl+f5을 사용하여 실행할 것이다. 둘의 차이를 알아보자.

f5ctrl+f5의 차이는 비주얼 스튜디오가 함께 실행되느냐 실행파일만 독립적으로 실행되느냐의 차이이다. f5입력시 비주얼 스튜디오가 함께 실행되어서 디버그모드로 실행이 된다. 하지만 ctrl+f5로 실행 시 실행파일만 실행이 된다.

코딩을 하다가 에러가 나면 에러를 찾아야 하는데 1학년 때의 나는 에러가 어디서 났는지 비주얼 스튜디오의 하단부에 있는 출력 창에서 찾아야만 했다. 몇 번째 줄에서 문제가 생겼는지 나오는 경우에는 찾아서 코드를 읽어보고 찾았지만 나오지 않는 경우에는 해결할 줄 몰랐다.

때문에 우리는 디버그모드를 사용해야 한다. 중단점을 찍어 디버그를 통해 에러를 찾고 수정을 하는 습관을 가져야 한다.

그럼 본론으로 돌아와서 ctrl+f5는 되도록이면 쓰지 말고 f5를 이용하여 실행을 하자.

그런데 f5로 실행을 하게 되면 실행이 된 후 콘솔 창이 꺼져버린다. 이 때 getchar 함수를 이용하자. 원래 이런 용도로 만든 것은 아니겠지만 나는 이렇게 많이 쓴다.

다음 그림을 보자.



지금까지 계속 봐왔던 코드이다. 오른쪽 메인 함수 맨 아래를 보면 getchar(); 를 사용했다.

원래 getchar함수는 입력을 받아서 넘겨주는 역할을 하는 함수이다. 예를 들어

int main ()
{
    char word = getchar();
    printf("문자 : %c \n", word);

    return 0;
}

이라고 쓰면 입력을 받아서 word로 넘겨준다. 이런 식으로 사용하는 함수이지만 위의 그림처럼 사용 시 엔터를 누르기 전에 다음으로 넘어가지 않는다. 따라서 f5로 실행을 해도 코드의 마지막에 적어주게 되면 엔터를 누르기 전에는 콘솔 창이 꺼지지 않는다. 중간 중간에 멈추는 역할을 하도록 자주 쓴다. 앞으로는 f5를 자주 쓰고 getchar도 자주 쓰도록 하자.

getchar는 다음과 같이 쓰이기도 한다. 다음 그림을 보자.

 






왼쪽과 오른쪽의 차이가 무엇일까? scanf의 이상한 특성 때문에 왼쪽의 경우 숫자를 입력하고 난 뒤 printf로 출력한 문자를 입력하세요 : ’가 나오고 문자를 입력 받지 않고 종료가 된다. 그 이유는 위에서 숫자를 입력한 뒤에 누른 엔터 때문이다. 두 번째 scanf에서는 \n가 입력이 된다. 예를 들어 5와 엔터를 눌렀을 때 버퍼에 5\n이 쌓이는데 5num에 들어가게 되고 버퍼에는 \n이 남게 된다. 버퍼에 남겨진 \n 때문에 다음 scanf\n가 자동적으로 들어가게 된다. 이 때 getchar(); 를 사용하게 되면 버퍼를 비워준다. 따라서 오른쪽 그림처럼 코딩을 한다면 왼쪽의 문제를 해결할 수 있다. 이렇게 버퍼를 비워주는 용도로도 getchar를 사용할 수 있다.

'프로그래밍 기초 > C++' 카테고리의 다른 글

가상함수 - 동적 바인딩과 정적 바인딩  (1) 2017.05.31
네임스페이스(namespace)란?  (0) 2016.11.11
생성자(Constructor)란?  (0) 2016.11.11
인자(Argument)와 매개변수(Parameter)  (0) 2016.11.11
객체란?  (0) 2016.11.11

댓글