inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

8.4강의 질문

해결된 질문

164

luki

작성한 질문수 14

1

안녕하세요 교수님 요즘 질문을 너무 자주해서 죄송합니다 ㅜㅜ

 

#include <stdio.h>

int main()
{
    int a = 0;
    int count = 0;
    while (1) {
        printf("Current count is %d. Continue? (y/n)\n", count);

        if (getchar() == 'n')
            break;

        while (getchar() != '\n')
            continue;

        count++;
    }



    return 0;
}

여기서 a를 하나만 입력한다고 가정할때,

  if (getchar() == 'n')
      break;

는 조건에 안맞아서 무시하고

        while (getchar() != '\n')
               continue;

여기선 while문안에 continue를 만나서 a는'\n'이 아니니까 while문안에 계속 탈출을 못해서 무한루프에 빠져야 하지않나요?

교수님께선 저 while문으로 인해 버퍼가 초기화 된다고 하신걸로 보아 이전강의에 해당 내용이 있는거 같은데 혹시 어느 강의에 있는지 알수있을까요 ㅜㅜ

c

답변 2

1

durams

안녕하세요, 질문&답변 도우미 durams입니다.

본 예제에서 무한루프에 빠지지 않는 이유는 사용자가 입력을 마치기 위해 엔터를 치는 순간 개행문자('\n')도 버퍼에 들어가기 때문입니다. 그 때문에 매번 입력받는 한 줄마다 마지막에는 꼭 '\n'이 있습니다.

입력받은 문자열을 while문에서 한 글자씩 검사할 때, 마지막의 '\n' 부분에 도달하면 조건인 getchar() != '\n'false로 평가되고, while문을 빠져나오게 됩니다.

그리고 getchar()로 버퍼의 문자들을 하나씩 꺼내오기 때문에 버퍼를 비우는 동작까지 같이 수행됩니다.

 

7.2 표준 입출력 함수들 getchar(), putchar() 예제04:35부터 보시면 해당 패턴에 대한 설명이 나옵니다. 영상도 보시고 이 설명글도 천천히 보시면 이해에 문제는 없으실거에요.

 

질문을 자주하는건 전혀 문제되지 않으니 부담없이 여쭤봐주셔도 됩니다. 질문글이 많다는건 오히려 공부를 열심히 하고 계시다는 증거가 되겠네요. 화이팅입니다.

 

0

luki

첫번째로 만나는 getchar는 입력에 쓰이고 그 이후에 쓰이는 getchar는 입력을 안받고 문자를 하나씩 꺼내오는거라고 보면 될까요?

1

durams

getchar()는 일관되게 표준 입력 버퍼에서 한 글자씩 꺼내오는 동작입니다. 대신 버퍼가 비어있을 때는 사용자로부터 입력을 받습니다.

본 예제는 한 줄씩 입력받고 입력받은 줄마다 즉시 버퍼를 비워주게 되므로, 아래 부분에서 사용자 입력을 기다리게 되는 것은 맞습니다.

if (getchar() == 'n')
    break;

다만 두 getchar()의 동작을 구별하기보다는, 상황에 따라 이해하시는게 좋습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. luki님.

귀하의 질문에 답변드리겠습니다. 프로그래밍에서는 버퍼 관리가 중요한 부분입니다. getchar()while (getchar() != '\n')의 작동 방식에 혼란스러워하신 것 같습니다. 여기에서는 getchar() 함수가 입력 버퍼에 남아있는 내용을 하나씩 확인하고 제거하는 역할을 하고 있습니다.

  1. if (getchar() == 'n') 블록:

    • 사용자가 입력한 첫 번째 문자를 검증합니다.
    • 결과가 n이 아니면 break를 건너뛰고 다음 코드를 실행합니다.
  2. while (getchar() != '\n') continue; 블록:

    • 입력 버퍼에 남아있는 문자들이 '\n'이 아닐 때까지 버퍼에서 하나씩 제거합니다.
    • 이는 사용자 입력에 newline('\n')이 도달할 때까지 수행되며, 그 Newline은 사용자가 입력을 완료했음을 의미합니다.

결론적으로, while (getchar() != '\n')는 입력 버퍼를 완전히 비우기 위한 코드이며, 버퍼에 남아있는 다른 문자들을 무시하고 루프로부터 빠져나갈 때까지 반복합니다.

문제의 핵심은, 사용자 입력 후에 버퍼 정리를 해야 다음 입력을 위한 준비가 되는 것을 while (getchar() != '\n')로 구현한 것입니다.

기억이 나지 않지만, 이는 강의의 입출력 버퍼 또는 기본 scanf와 getchar 등의 함수 처리에서 다뤄질 가능성이 있습니다. 여기서 더 자세한 내용을 찾을 수 있을 것입니다.

이와 관련된 비슷한 질문 및 답변을 참고하시기 바랍니다:
- 8.1 입출력 버퍼 강의를 보고 질문드립니다.
- 교수님 버퍼 관련 질문이 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

1

52

3

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

1

56

2

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

1

54

2

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

1

49

1

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

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

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

1

60

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

79

2

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

1

112

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

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

1

58

2

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

1

68

1

Step over 기능 문의

1

53

2

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

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

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

1

62

2

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

1

64

2

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

1

53

2

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

1

53

2

11.5 코드 구현

1

67

2