개행문자('\n'
)를 읽느냐 마느냐가 다르다!
std::cin >>
은'\n'
직전까지만 읽는다. (버퍼에'\n'
이 남아있음)getline()
은'\n'
까지 읽고,'\n'
을 버린 문자열을 저장한다.- 따라서, 그냥 1 -> 2 순서로 사용하면 2에서 빈 문자열을 저장하게 되니,
사용 직전에std::cin.ignore(4096, '\n');
orstd::cin >> std::ws;
를 써주자.
(사실4096
대신 이렇게 긴 걸 적어주는 게 정석.)
getline()
은 아래 2가지가 있는데, 둘 다 위 설명처럼 작동한다.
사족으로, 둘 다 std::cin
을 참조로 반환한다.