강의

멘토링

로드맵

Inflearn brand logo image

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

윤주헌님의 프로필 이미지
윤주헌

작성한 질문수

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

46강 string 버퍼 질문입니다

작성

·

49

1

스크린샷 2025-06-30 160305.png.webp

jack jack 주황색 앞 부분이 첫번째 cin 에 들어가고 뒤에 jack과 엔터가 버퍼에 남는 다고 알려주셨는데 그럼 your age 에 jack이 하나만 들어가야 맞는게 아닌가요? 왜 jack이 두개나 들어가나요? 이해가 안돼요

답변 2

0

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

정말로 age 변수에 jack이 두 개가 들어간 것이 맞을까요? 디버거를 통해 확인해보셨으면 좋겠습니다. 얼핏 봤을 때에는 age"jack jack"이 들어간 것처럼 보이긴 합니다만, 다시 아래 사항에 유의하여 생각해보세요.

  1. 사용자가 입력한 문자열과 프로그램이 출력하는 문자열의 구분

  2. 줄바꿈이 어디에서 일어나는지 확인

고민해보시고 그래도 해결이 안 된다면, 다시 댓글을 달아주세요.

윤주헌님의 프로필 이미지
윤주헌
질문자

해결됐습니다. 그런데 버퍼시에는 커서가 움직이지 않고 바로 변수 name과 age를 출력하네요? 이건 왜 그런건가요?

name에 대해 입력을 받을 때 공백을 포함한 문자열을 입력하게 되면 결과 name과 age를 바로 출력하는 동작을 말씀하시는 것 맞나요?

이는 buffered i/o라는 입출력 방식 때문입니다. 간단하게 말씀드리자면, 입력을 받고자 할 때 버퍼에 내용이 이미 들어와있을 때에는 해당 내용을 사용하고, 버퍼가 비어 있다면 새로 입력을 받게 됩니다.

0

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

C++에서 cin을 사용해 문자열을 입력받을 때, 빈칸(공백)은 새로운 입력의 시작을 의미하기 때문에 첫 번째 cin 연산에서는 공백 앞의 문자열만을 받아들입니다. 즉, "jack jack"이라는 입력은 처음에 "jack"name에 저장하고, "jack"엔터(\n)는 입력 버퍼에 남습니다.

이후 두 번째 cin 연산이 실행될 때, 버퍼에 남아 있던 "jack"이 입력받아지고, 버퍼는 엔터(\n)만 남게 됩니다. 이는 두 번의 cin 연산이 빠르게 연속적으로 사용되기 때문에 발생하는 일반적인 현상입니다.

이와 관련된 문제를 해결하려면, getline(cin, string) 함수를 사용하는 것이 좋습니다. getline은 줄바꿈 문자까지 포함하여 한 줄 전체를 입력받기 때문에 공백도 포함된 전체 문자열을 변수에 저장하게 됩니다. 이렇게 하면 모든 공백도 무시하지 않고 포함되므로, 공백으로 분리되는 문제를 걱정할 필요가 없습니다.

이미지를 통해 자세한 코드를 분석하지 않았지만, cin.ignore()getline과 같은 추가 함수들을 통해 이 문제를 해결할 수 있습니다.

관련 질문 링크:
- 문자열 중간에 빈칸이 있을 때 age로 넘어가는 문제
- cin에 빈칸이 있는 문자열 넣을 때 문제

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

윤주헌님의 프로필 이미지
윤주헌

작성한 질문수

질문하기