inflearn logo
강의

講義

知識共有

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

8.5 数字と文字を混ぜて入力を受け取る

질문) m1n_q님의 질문의 답변, 이해했는지 확인하고 싶어요.

解決済みの質問

401

logt

投稿した質問数 23

0

안녕하세요.

C언어는 질문도 상당히 많고, 길기도 하네요.. 질문드리기가 정말 실례되네요 ㅋㅋ...

저의 뇌피셜..;;이지만  제가 이해한 게 맞는지 확인하고 싶어요..ㅠ

처음에 while((c = getchar()) != '\n') 부분에서 " * 공백/3 공백 5 공백 "을 받은 것이 중요한 포인트입니다.

여기서 차곡차곡 순서대로 쌓인 버퍼에서 3과 5 앞의 공백은 각각 L-value 변수들을 구분하기 위한 공백입니다. 따라서 char의 버퍼에는 '*', 'space', '\n'가 들어가게 됩니다.

결과적으로 while은 총 (* 3 5), (space 3 5), (\n 3 5). 세 가지의 경우의 수를 갖게 됩니다.

아래 주석1) 이 설명에 잘못된 점이 하나 있습니다.

처음에 char버퍼에 *과 space와 \n가 있다고 했는데, 그렇다면 (%, 2, 2)가 출력되지 전에, \n를 만나서 while문이 실행되지 않아야 합니다..

\n가 중간에 어디선가에서 제거가 되는 것인데.. 또는 제가 완전히 잘못 이해했던 것일거에요 ㅋㅋ...(허탈)

------------------------------------------------------

주석1) joy님 말씀대로라면

"두번째로 scanf가 실행되게 되었는데 버퍼엔 \n 만 남아있게되므로 scanf 에서 가져올게 없는 상태입니다. 근데 이때 \n는 버퍼에서 비워집니다."

이 때문에 sp, 3, 5에서 scanf를 호출할 때, \n는 사라지고 (%, 2, 2 +  '\n')가 들어가니 %, 2, 2가 끝나고 while에서 \n를 만나게 되는 것 같습니다.

버퍼는어렵다 c

回答 2

1

honglab

강의 몇 분 몇 초 인가요? 버퍼 질문글을 종종 나오는 것 같은데 이번 기회에 보충 강의를 만들려고 합니다. 열심히 공부하고 계신 것 같은데 질문글을 정확하게 정리해주시면 좋겠습니다.

0

logt

질문 게시판에 다시 올리도록 하겠습니다.

설 연휴인데, 소중한 시간 내주셔서 검토해주신 정모 선생님에게 진심으로 감사드립니다.

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

1

49

3

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

1

54

2

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

1

53

2

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

1

46

1

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

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

135

2

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

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

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

1

112

2

소스파일안에 여러 파일

1

74

2

F5와 F7의 차이

1

75

2

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

1

58

2

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

1

68

1

Step over 기능 문의

1

52

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