문자열 입력

김펭귄·2025년 7월 18일

C++

목록 보기
5/20

std::cin

std::string name{};
std::cin >> name;
  • John Doe를 입력 시, John까지만 추출하여 name에 저장
  • 스페이스(공백문자)를 받지 못 한다

std::getline(std::cin, 변수)

std::string name{};
std::getline(std::cin, name);	// "John Doe"
std::getline(std::cin, name);	// " Charles Leclerc "
  • #include <string> 필요
  • std::getline을 이용하면, 공백문자를 포함해 한 줄 전체를 읽어 name에 저장
  • John Doe 엔터를 입력 시, John Doe까지 추출하여 name에 저장
  • 그리고 남아 있는 \n 제거
  • " Charles Leclerc 엔터"를 입력 시, 공백을 포함하여 " Charles Leclerc "까지 추출하여 name에 저장
  • 그리고 남아 있는 \n 제거
int x{};
std::cin >> x;	// 5 입력

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;	// 5 입력

std::string name{};
std::getline(std::cin >> std::ws, name);	// John Doe 입력
std::cout << '[' << name << ']';	// [John Doe] 출력
  • std::getline(std::cin >> std::ws)는 입력 버퍼에서 선행 공백 문자를 제거한 후 문자열을 추출함
  • 따라서 위의 상황과는 달리 5를 추출하고 입력 버퍼에 남아있던 \n을 제거하고 입력값을 받음
  • 단점으로는 선행 공백문자를 제거하므로, " hello " 같이 의도적인 공백을 추출하지 못 함. "hello " 뒤의 공백만 추출하여 값이 저장된다

Reference

learn.cpp

profile
반갑습니다

0개의 댓글