std::cin
std::string name{};
std::cin >> name;
John Doe를 입력 시, John까지만 추출하여 name에 저장
- 스페이스(공백문자)를 받지 못 한다
std::getline(std::cin, 변수)
std::string name{};
std::getline(std::cin, name);
std::getline(std::cin, name);
#include <string> 필요
std::getline을 이용하면, 공백문자를 포함해 한 줄 전체를 읽어 name에 저장
John Doe 엔터를 입력 시, John Doe까지 추출하여 name에 저장
- 그리고 남아 있는
\n 제거
- "
Charles Leclerc 엔터"를 입력 시, 공백을 포함하여 " Charles Leclerc "까지 추출하여 name에 저장
- 그리고 남아 있는
\n 제거
int x{};
std::cin >> x;
std::string name{};
std::getline(std::cin, name);
std::cout << '[' << name << ']';
- 위에서 5를 입력하였을 경우,
std::cin은 5까지만 추출하였기에 입력 버퍼에 \n이 남아있음
std::getline(std::cin, name)은 선행 공백 문자를 제거하지 않으므로 입력 버퍼에 남아있는 \n을 보고 문장이 입력되었다 생각하여 name에 빈 문자열 추출 후 저장
- 그리고 남아 있는
\n은 제거
std::getline(std::cin >> std::ws, 변수)
int x{};
std::cin >> x;
std::string name{};
std::getline(std::cin >> std::ws, name);
std::cout << '[' << name << ']';
std::getline(std::cin >> std::ws)는 입력 버퍼에서 선행 공백 문자를 제거한 후 문자열을 추출함
- 따라서 위의 상황과는 달리
5를 추출하고 입력 버퍼에 남아있던 \n을 제거하고 입력값을 받음
- 단점으로는 선행 공백문자를 제거하므로, "
hello " 같이 의도적인 공백을 추출하지 못 함. "hello " 뒤의 공백만 추출하여 값이 저장된다
Reference
learn.cpp