작성
·
310
0
int main()
{
int count = 0;
while (1)
{
printf("Current count is %d. Continue? (y/n) \n", count);
if (getchar() == 'n')
break;
while (getchar() != '\n')
continue;
count++;
}
}
저번 질문과 연결 됩니다. 제가 했던 질문에서
//초보때는 while(조건)에서 조건문도 실행이 된다는 점을 인식하지 못할 수도 있습니다.
getchar()가 반복해서 기능을 수행하게 된다는 점을 다시 한 번 생각해보세요.//
이렇게 답변을 주셔서 검색도 해보고 생각도 많이 해봤는데요. getchar() 이 부분을 정확하게 이해하지 못 해서 전체적인 이해가 되지 않은 것 같습니다.
순서도를 그리며 이해를 해봤습니다.
while (getchar() != '\n')
continue; 이 부분이 없다고 생각하면
1. printf 문 실행
2.if (getchar() == 'n') 에서 getchar() 로 입력값을 받음
만약 입력값이 abcdn이면
3. a일때 count++
4.printf문 실행
5.count ++ getchar() 값은 b로 넘어감
... 이렇게 n까지 반복되고 n이모녀 count++ 하지 않고
n이니 종료가 됩니다.
그런데 여기서
while (getchar() != '\n')
continue; 이 부분을 추가하게 되면
while에서 getchar() 부분은 if안에 있는 getchar()처럼
입력 값을 받는 것이 아니고 이미 받아진 입력 값을 검사 하는 것 인가요..?
getchar() 을 어떤 값을 입력 받는 다고 생각 하고 있어서 자꾸 저런 의문이 듭니다. continue를 하게 되면 계속 입력값을 받아야 하는데 (while에 getchar()이 있으니) 왜 검사만 하는 것일까 하고요.
getchar() 강의에서 나중에 그림으로도 설명 해주신다고 했는데 지금은 대강 이해하고 넘어가는 것이 좋을까요?
답변 2
1
이번 강의가 '버퍼'에 대한 것이네요. 버퍼 얘기는 뒤에 몇 번 더 나오긴 합니다만, 이 내용은 여기서 이해를 하고 진행하시는 것이 좋겠습니다.
학생이 어떤 내용에서 막혔는지 추측하는 것이 쉬운 일은 아닙니다만, 이번 글에서 보기에는
입력 값을 받는 것이 아니고 이미 받아진 입력 값을 검사 하는 것 인가요..?
이것이 가장 중요한 부분인 것 같습니다.
사용자가 입력을 하면 그 내용이 버퍼에 계속 남아있습니다.
버퍼에 내용이 많이 남아 있다면 getchar()가 그 내용을 계속 읽어옵니다.
while(getchar()!='\n') continue;는 사용자로부터 새로 입력을 받는 것이 아니라 버퍼에 남아 있는 내용을 모두 지워버리는 기능이 됩니다. 뒤에도 자주 사용되기 때문에 이해하고 넘어가시는 것이 좋을 것 같습니다.
아직 이해되지 않은 부분이 있다면 다시 질문주세요.
0
아 그렇다면 getchar()는 꼭 getchar()으로 입력값을 받지 않아도 버퍼에 입력 값이 있으면 받아 오기 때문에
여기서
int main()
{
char c;
int rows, cols;
while (1)
{
scanf("%c %d %d", &c, &rows, &cols);
display(c, rows, cols);
if (c == '\n')
break;
}
while (getchar() != '\n') continue; 를 추가하여 버퍼에 남아있는 엔터 값을 지워줄 수 있는 것인가요???
감사합니다 교수님!!