Search

C++ | cin과 getline 순서

Date
2024/07/27
category
C++
Tags
c++

1. cin 호출 후 getline 호출

std::string str1; std::string str2; std::cin >> str1; std::getline(std::cin, str2);
C++
복사
위 코드를 실행 후 hello world를 입력하면 str1에는 “hello”가 저장되고 str2에는 “ wolrd”(띄어쓰기가 문자열에 들어갔다)가 저장된다. 또한 hello 입력 후 엔터를 눌러 줄바꿈을 한 후 world를 입력하면 str1에는 “hello”가 저장되고 str2에는 “”(빈 문자열)이 저장된다. 이런 결과를 보고 내린 결론은 cin은 공백 문자를 버퍼에서 지우지 않는다는 것이다. 버퍼에 남아있던 공백 문자가 getline에 영향을 줬다. 띄어쓰기가 있을 때는 띄어쓰기가 포함되고 줄바꿈이 있을 때는 줄바꿈 문자를 버퍼에서 읽고 이후에 입력을 받지 않고 getline이 종료된다. 따라서 이런 경우 getline전에 ignoreget같은 함수를 이용해 입력 버퍼에서 공백 문자를 없애는 작업을 해야 한다.

2. getline 호출 후 cin 호출

std::string str1; std::string str2; std::getline(std::cin, str1); std::cin >> str2;
C++
복사
cin호출 후 getline을 호출했을 때와 다르게 getlinecin에서 입력받는 문자열에 영향을 주지 않는다. getline을 연속해서 호출해도 다음 문자열에 영향을 주지 않는데 이것을 생각해보면 getlinecin과 다르게 공백 문자를 버퍼에 남기지 않는다. 그리고 cin또한 연속 호출할 때는 문자열에 공백 문자가 포함되지 않는다. cin은 버퍼에 공백 문자를 남기긴 하지만 단지 무시할 뿐이다.