cin을 쓸 때 입력을 한번 지나가는 현상을 해결하는 방법

오늘 공부하던 중 발견한 부분.

cin을 통해 문자 하나를 입력 받은 후 getline으로 다른 문자열을 입력 받으려고 할 때 문제가 생긴다. 입력을 한번 건너뛰는 현상.

cin으로 입력 받은 다음 다른 이벤트(?)가 더 오는 것 때문이라고 한다. 이 문제를 해결하기 위해서 std::fflush(stdin);을 이용하면 이 현상이 사라진다. cin을 이용할 때는 반드시 기억해놔야할듯.

std::string temp;
std::cin >> temp;
std::cout << "start" << std::endl;
int rtn = std::fflush(stdin);

std::string msg;
std::getline(std::cin, msg);
std::cout << "end" << std::endl;

string 타입에 빈칸을 포함하는 문자열을 입력 받는 방법

string 타입의 변수 str에 문자열을 넣을 때

cin >> str;

처럼 하면 문자열은 들어가는데 문자열에 빈칸이 들어가면 입력이 안되었다. 정확히는 안된다기 보다는 되는 것처럼 보이고 다음 cin으로 입력을 받을 때 그냥 무시처리 된다는 것이지만. 문자열 중간의 공백 때문에 생기는 것인데 이것을 해결하기 위해 인터넷을 찾아본 결과 다음처럼 하니까 해결되었다.

getline(cin, str, 'n');

getline 함수가 아닌 cin만 가지고는 공백이 들어간 문자열은 받을 수 없다고 한다.

자바나 액션스크립트에서는 이런 고민할 필요가 없었는데 C++에 오니 참 이런 것 하나 처리하기에도 민감할 필요성이 있는 것 같다.