• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

9:50 _getch() 관련해서 질문있습니다.

21.07.14 01:03 작성 조회수 218

0

강의에서 보시면 _getche()의 e는 echo의 약자고

입력을 하면 buffer가 없기 때문에 바로바로 출력을 해주기 때문에 메아리처럼

따라온다고 해서 _getche()이라고 하셨는데

저렇게 echo가 되는 것은 밑에 putchar(c); 가 있기 때문이 아닌가요?

같은 이유에서 _getch()도 buffer 없이 글자를 입력받고

while문에 따라서 한글자 입력받을 떄 마다 putchar(c); 를 실행시켜줘야 하는 것이 아닌가요?

아니라면 그 이유가

_getche()는 출력을 해주므로 echo가 붙고 _getch는 출력함수를 무시하기 때문인 것인가요?

궁금합니다.

답변 2

·

답변을 작성해보세요.

3

안소님의 프로필

안소

2021.07.15

"바로바로 출력을 해주기 때문에" 라고 하셨는데 여기서 말하는 출력은 putchar 나 printf 가 해주는 그 출력의 의미보다는(얘네는 기존에 존재하는 어떤 변수 혹은 상수값, 즉 메모리 값을 출력하는거죠!) "입력 中인 문자들이 화면에 표시가 된다"의 의미로 생각하시면 될 것 같아요. 

저희가 scanf 같은걸로 입력할 때 뭘 입력하는지가 화면에 보이잖아요! 즉 무엇을 입력 중인지가 화면에 보이잖아요? 그 의미이에요! 그런 의미에서 scanf 도 getche 처럼 입력 중인걸 화면에 출력해주는 입력 함수라고 보시면 됩니다. scanf 도 에코로 출력하는 함수인거에요.

getche 말고 getch 를 코드에 써보면 이해가 바로 되실거에요. getch 쓰면 사용자가 뭘 입력하고 있는지, 뭘 입력 중인지가 화면에 표시되지 않습니다. 

getche 를 썼을 때 예를 들어 a 를 입력하면 화면엔 aa 가 표시됩니다. getche 로 입력받은 a 와 putchar 로 출력한 a 인거에요. a 를 입력하면 그 a 가 putchar 를 만나기 전에도 화면에 보이는거에요. scanf 같은 것도 이렇죠! 이걸 화면 출력이라고 언급하신거구요 putchar 출력과는 별개인 것입니다. putchar 는 변수 값을 '출력'하는거고 getche 나 scanf 는 사용자가 입력 중인 것을 '출력', 즉 화면에 즉시 보여줌! 이라고 해석할 수 있을 것 같네요.

반면에 getch 를 쓰고 a 를 입력하면 화면엔 a 하나만 표시될 뿐입니다. 이때 a 는 putchar 가 출력한 a인거에요. getch 는 사용자가 입력 중인걸 화면에 표시하지 않기 때문에..! 강의 코드에서 getche 를 getch 로 바꾸고 실습해 보시면 바로 이해 되실거에요.

"같은 이유에서~" 라고 말씀하신 아랫 부분은 제가 잘 이해가 되지 않지만 getche 의 출력을 putchar 출력으로 오해하셔서 주신 질문인 것 같네요..!! 제 위의 설명을 보시면 이해가 되실거라고 생각합니다! 그 출력을 한다고 강의에서 말씀하신게 그 putchar 출력 이게 아니라 입력 중인게 화면에 보이는지 아닌지! 그 의미에서 출력을 말씀하신것 같아요. 위에서 과정을 설명드린것과 같이 출력함수 putchar 를 무시한다거나 그런건 없습니다. putchar 는 언제나 실행 되었습니다. 입력 중!!!!인게 화면에 표시되냐 아니냐 그 차이인거에요. 

0

thd2tn님의 프로필

thd2tn

질문자

2021.07.15

_getch와 _getche의 차이점을 명확하게 이해했습니다. 그렇다면 getchar도 echo처럼 작동하지만 버퍼에 두고 \n를 입력받으면 출력을 해주기 때문에 _getche와의 차이점이 존재하겠네요. 정말 감사합니다.