작성
·
263
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를 만나게 되는 것 같습니다.