답변해 주신분은 마이크로소프트 뉴스그룹에서 [WICS]임주용님이 답변해 주신겁니다.
참으로 고마운 입니다.^^
우선 짧고 간략한 코드이니 요런식으로 코딩해도 별말 없을수 있겠지만
요즘 요런식으로 코딩하면 욕먹기 딱 좋습니다. 코드를 보고 이해는 하실수
있어야겠지만 이런식으로 코딩은 하지마세요^^
음..그리고 무엇이 이해안되는지는 적어주셔야 제대로된 설명을 해드릴수
있을것같군요.
암튼 설명들어갑니다~
> return (bufp>0) ? buf[--bufp] : getchar();
bufp가 0이면 버퍼에 아무것도 없고 그 이상이면 버퍼에 내용이 있는것으로
보이는군요.
위 문장은 버퍼에 값이 존재하면 버퍼의 마지막 값을 리턴하고 존재하지
않으면 getchar()를 이용해 입력받아서 리턴하는거네요.
버퍼의 마지막 값을 리턴하라는 내용이 buf[--bufp]가 된 이유는
bufp는 -1에서 시작하는게 아니라 디버깅의 편리목적인지 bufp는 0에서
시작하므로
실제 위치인 bufp-1에서 값을 얻고 bufp를 1줄여주기 위함입니다.
> if(bufp>=BUFSIZE) printf("ungetch: too many characters\n");
BUFSIZE는 buf의 최대크기이므로 그 이상 push를 못하게 하기 위함입니다.
> else
> buf[bufp++]=c; /* 이해가 또 안가는 부분 */
buf[bufp]에 입력값을 넣고 bufp를 1증가시키는 문장입니다. 가령 buf에는 현재
아무값이 없고 bufp는 0이면 buf[0]에 입력값이 들어가고 bufp는 1이 됩니다.
----------------------------------------------------------------
심재웅 님이 쓰신 글 :
: #define BUFSIZE 100
:
: char buf[BUFSIZE];
: int bufp=0;
:
: int getch(void)
: {
: return (bufp>0) ? buf[--bufp] : getchar(); /*이 문장이 이해가 안갑니다. 설명좀 부탁드립니다. */
: }
:
: void ungetch(int)
: {
: if(bufp>=BUFSIZE) /* 이해 안가는 부분 */
: printf("ungetch: too many characters\n");
: else
: buf[bufp++]=c; /* 이해가 또 안가는 부분 */
: }
:
: 이 세가지 부분이 이해력이 부족해서 인지 모르겠습니다.
: the C programming language(kernighan, ritchie)이란 책을 보구있는데 쉽지 않습니다.
: 부탁드립니다. 되도록 쉽게 설명해 주시면 고맙겠습니다.
|