인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박성민님의 프로필 이미지
박성민

작성한 질문수

홍정모의 따라하며 배우는 C언어

8.1 입출력 버퍼 강의를 보고 질문드립니다.

작성

·

184

1

안녕하세요. 교수님.

8.1 입출력 버퍼 강의를 보고 질문드립니다.

입력할 때마다 한 글자씩 버퍼로 이동하고, 버퍼에 담긴 내용이 통째로 전달되는 일련의 과정이 수행되는 부분이 '입력 버퍼'에 해당하는 것이라고 생각했습니다. 그래서 입력할 때 버퍼가 있다면 출력할 때도 버퍼가 있지 않을까 싶어서 찾아봤더니 출력 버퍼도 있다는 것을 알게 되었습니다. 아래는 출력 버퍼를 고려한 관점으로 구동 원리를 서술해본 것입니다.

아래와 같은 코드를 작성했다면, getchar()로 받은 글자들은 입력 버퍼에 들어가고 '\n'(Enter키)를 입력 받는 순간 버퍼 통째로 프로그램에 넘어가 while 루프 안에 있는 코드들을 수행합니다(사실 이 부분에서도 통째로 넘어간 버퍼가 결국 글자 하나씩 꺼내서 코드를 수행해야 하지 않나 싶긴 했습니다). 이어서 putchar(c + 'A' - 'a')(또는 putchar(c))에 c + 'A' - 'a'(또는 c) 부분의 결과가 출력 버퍼에 하나씩 쌓이고 출력 버퍼가 통째로 콘솔 창에 출력되게 됩니다.

이렇게 이해했는데 맞는 건지 잘 모르겠어서 질문 남깁니다.

아니면 혹시 getchar()로 받은 글자들이 하나씩 while 루프 안에 있는 코드들을 모두 수행한 후, putchar(c + 'A' - 'a')(또는 putchar(c))에 c + 'A' - 'a'(또는 c)부분의 결과를 버퍼에 하나하나 저장하여 버퍼가 통째로 콘솔 창에 출력되게 되는 건가요?

#include <stdio.h>
void main()
{
    char c;
    while((c = getchar()) != '\n')  // get characters until enter ‘enter' key.
    {
        if('a' <= c && c <= 'z')        // if character c is between ‘a’ ~ ‘z’ (97 ~ 122) 
            putchar(c + 'A' - 'a'); // add (65 – 97 = -32) to print out uppercase.
        else
            putchar(c);
   }
    printf("\n");
}

질문을 최대한 고심해서 써봤습니다,,

항상 강의 잘 듣고 있습니다. 감사합니다.

답변 2

1

홍정모님의 프로필 이미지
홍정모
지식공유자

안녕하세요? 질문을 잘 작성하기 위해 노력하신 것 같습니다.  아무래도 온라인 강의이다 보니 질의응답에 한계가 있으니 양해를 부탁드립니다.

1. "제가 ~~하게 이해를 했는데 이게 맞나요?"라는 질문은 잘못하면 큰 오해로 연결될 수 있기 때문에 명확하게 답을 드리기가 매우 난감한 경우가 많습니다. 간단한 OX 퀴즈 수준으로 정리해서 물어보시는 것이 가장 효율적입니다.

2. 해당 강의에서 질문을 작성해주시면 비슷한 부분을 공부하는 다른 학생들에게도 도움이 됩니다.

질문 요령에 대한 더 자세한 내용은 아래 내용을 참고하시기 바랍니다.

다시 원 질문으로 돌아와서 입출력 버퍼에 대한 내용은 애매한 측면이 있는 것이 사실입니다. 왜냐하면 프로그래밍 언어보다는 입출력 하드웨어를 관리하는 운영체제에서 결정하는 부분이 많기 때문입니다. 경우에 따라서는 운영체제가 의도적으로 버퍼 접근을 막을 수도 있습니다. 관련된 내용들이 13장 파일 입출력에서 추가로 다루어지고 있고 버퍼에 대해 더 자세한 내용들이 등장합니다. 

이미 열심히 정리를 하신 것 같지만, 제가 도와드릴 수 있는 형태로 한 번 더 정리하신 후에 해당 강의에서 다시 질문을 해주시면 좋겠습니다. 강의가 워낙 많다보니 제가 다 외우고 있지 못한다는 점도 이해를 해주시면 감사하겠습니다.

* 인프런 질문에서 답 잘 받는 요령

https://blog.naver.com/atelierjpro/221547580916

0

박성민님의 프로필 이미지
박성민
질문자

13장에 입출력 관련 내용이 있었군요..!

제가 조금 성급했나 봅니다 ㅎㅎ

13장까지 본 후 더 간결해진 질문으로 다시 돌아오겠습니다.

감사합니다. 교수님. 

박성민님의 프로필 이미지
박성민

작성한 질문수

질문하기