인프런 커뮤니티 질문&답변

passionfarm님의 프로필 이미지
passionfarm

작성한 질문수

독하게 시작하는 C 프로그래밍

문자, 정수 입력과 개행문자 제거

섹션 9, 표준 입/출력 관련 질문입니다!

해결된 질문

작성

·

323

0

널널한 개발자님! 항상 좋은 강의 감사드립니다ㅎㅎ

다름아니라 섹션 9의 문자, 정수 입력과 개행문자 제거 부분에서 풀리지 않는 부분이 있어 이렇게 질문을 올리게 되었습니다.

강의 중 24:28 쯤, "퍼올려도 N이 남는다"라는 부분이 이해가 잘 가지 않는데요!

제가 이해한 바로는 scanf_s 함수에서 %d\n의 형태로 데이터를 받기 때문에 입력 버퍼 내부에 개행문자도 함께 삭제됐으므로 다음 개행 문자를 입력받을 때까지 사용자 입력을 계속 요청하는 것으로 알고 있었는데, 엔터를 쳐도 개행문자를 인식했음에도 계속해서 개행문자가 남는 이유에 대해서 알고 싶습니다!

다시한번 감사드리고, 추운 날씨 몸 건강도 잘 챙기시기를 바라겠습니다. 화이팅입니다!

답변 2

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

%d\n의 문제는 \n이 2회 등장해야 한다는 것입니다. 가령 %d만 입력을 받는다 하더라도 scanf() 함수는 \n이 등장해야 입력이 끝났다고 판단합니다. 즉 '정수3\n'을 하나의 입력으로 상정합니다. 심지어 \n을 제거하지도 않습니다.

그런데 거기에 추가로 \n을 넣어버리면 그 다음은 어느 정도 예상이 되리라 생각합니다. 깊이 생각 할 필요 없습니다. scanf() 함수는 내가 구현한 것이 아니라 가져다 사용하는 표준 입/출력 함수입니다. 사용 방법을 잘 알아야 합니다. 그리고 그 작동현상은 이해의 대상이 아니라 결과를 암기하면 될 일인 것입니다.

참고하시기 바랍니다. :)

0

passionfarm님의 프로필 이미지
passionfarm
질문자

바쁘신 와중에도 신경써서 답변해주셔서 감사드립니다ㅎㅎ

그 전에 확인한 내용이 있는데 저와 비슷한 궁금점을 가진 분들이 계실 것 같아 추가로 보완했는데 도움이 되셨으면 좋겠습니다.

format에서 끝 부분에 \n으로 들어올 경우 공백 문자로 인식하게되고, 입력 시 공백문자 + 공백 문자가 아닌 문자가 입력되어야 입력이 종료되는 것으로 확인했습니다. 이후 추가로 입력 시, 이전에 입력한 공백 문자가 아닌 문자가 버퍼에 남아있으므로 문제가 될 수 있으므로 주의하시면 좋을 것 같습니다.

다음은 출처입니다.

https://electro-don.tistory.com/entry/scanf-n-%EA%B4%80%EB%A0%A8

passionfarm님의 프로필 이미지
passionfarm

작성한 질문수

질문하기