inflearn logo
강의

講義

知識共有

ホン・ジョンモのついていきながら学ぶC言語

8.1 入出力バッファ

[02:47] getchar()

375

whiteleo960732

投稿した質問数 9

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() 강의에서 나중에 그림으로도 설명 해주신다고 했는데 지금은 대강 이해하고 넘어가는 것이 좋을까요?

c

回答 2

1

honglab

이번 강의가 '버퍼'에 대한 것이네요. 버퍼 얘기는 뒤에 몇 번 더 나오긴 합니다만, 이 내용은 여기서 이해를 하고 진행하시는 것이 좋겠습니다.

학생이 어떤 내용에서 막혔는지 추측하는 것이 쉬운 일은 아닙니다만, 이번 글에서 보기에는

입력 값을 받는 것이 아니고 이미 받아진 입력 값을 검사 하는 것 인가요..?

이것이 가장 중요한 부분인 것 같습니다.

사용자가 입력을 하면 그 내용이 버퍼에 계속 남아있습니다.

버퍼에 내용이 많이 남아 있다면 getchar()가 그 내용을 계속 읽어옵니다.

while(getchar()!='\n') continue;는 사용자로부터 새로 입력을 받는 것이 아니라 버퍼에 남아 있는 내용을 모두 지워버리는 기능이 됩니다. 뒤에도 자주 사용되기 때문에 이해하고 넘어가시는 것이 좋을 것 같습니다.

아직 이해되지 않은 부분이 있다면 다시 질문주세요.

0

whiteleo960732

아 그렇다면  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; 를 추가하여 버퍼에 남아있는 엔터 값을 지워줄 수 있는 것인가요???

감사합니다 교수님!!

Export template 안됨

1

27

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

56

3

main 함수에서 왜 int만 선언이 되는걸까요

1

57

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

55

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

138

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

94

3

강의자리ㅛ

1

80

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

114

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

79

2

c = TWO * (a+b); 에서 a와 b는?

1

59

2

; 세미콜론을 붙이는 기준에 문의

1

70

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

76

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

61

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

54

2