Post

[C] 버퍼

버퍼란?

어떤 장치에서 다른 장치로 데이터를 송신할 때 일어나는 시간의 차이나 데이터 흐름의 속도 차이를 조정하기 위해 일시적으로 데이터를 기억시키는 장치. 순화어는 `완충기’라고도 합니다.

Desktop View

이미지 하나를 가져왔는데요 \n (줄바꿈, 엔터키)가 들어가있는 버퍼네요~

이런식으로 일시적으로 중간에서 우리가 입력한 데이터들을 보관하고 처리하는 중간지점이라고 보시면 됩니다.

Desktop View

이렇게 하나 만들었습니다. 제가 원하는 것은 문자하나를 입력하고 그 문자가 출력되면 또 다른 문자를 입력하고 또 그것이 출력되도록 하고싶어할 것입니다.

그래서 a라는 문자를 처음에 입력하고 엔터키를 눌렀더니?

Desktop View

잉? 또 다른 문자를 입력할 새도 없이 빌드가 끝나버렸습니다. 왜 그런걸까요?

답은 버퍼에 있습니다. 처음에 우리가 a를 입력할 때 우리는 a를 누르고 엔터키를 눌렀죠?

그렇다면 버퍼에는 a 와 엔터키, 즉 \n 가 처음 사진 처럼 남아있는 것입니다.

여기서 중요한 것은 %c는 무조건 버퍼안에서 한 개의 문자를 가져가서 입력을 하는데요, 그것은 \n도 포함입니다.

순서대로 보자면 우리가 a 와 엔터키를 눌렀을 때, 버퍼에는 두 문자가 있었고 scanf에서 한개의 문자, a만 가져가서 printf로 출력을 시킨 것이죠. 그 다음 또 다른 scanf문장을 빌드할 때 버퍼안에는 엔터키, 즉 공백이라는 문자가 이미 존재하기 때문에 우리가 입력할 필요도 없이 그것을 입력해버리고 출력을 한것입니다. 따라서 보이는 것처럼 두번째 입력한 문자를 출력 할때에는 공백으로 표시되는 것이죠!

이러한 원리는 앞으로 프로그래밍을 할 때에 굉장히 중요한 요소고, 정말 재미있었습니다!

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.