-
cin.ignore() - cin, getline 동시에 사용할 때C++ 2021. 7. 6. 03:20반응형
cin.ignore()
버퍼 비워주는 역할
cin으로 정수 등을 입력 받고 난 후, getline()으로 또 입력 받는 경우에 사용.
이때 cin.ignore()로 버퍼를 비워주지 않는 경우, cin 처리하고 남은 개행문자가 getline()에 들어가게 된다.
#include <iostream> #include <string> int main() { std::string s; int n; // 입력 값이 차례대로 5\n10\n20일 때. // 정수형 변수 n에는 입력한 숫자만 저장되고, \n은 버퍼에 그대로 남음 std::cin >> n; std::cout << n << '\n'; // 5 // 새로 입력하기도 전에 위에서 입력하고 남은 \n이 들어와버림 std::getline(std::cin, s); std::cout << s << '\n'; // \n std::cin >> n; std::cout << n << '\n'; // 10 // cin.ignore()를 통해 입력 버퍼를 비우면 해결 가능 std::cin.ignore(); std::getline(std::cin, s); std::cout << s << '\n'; // 20 return 0; }
테스트 프로그램 작성 시, 루프 도는 과정에서 잘못 들어 온 입력을 처리할 때 사용할 수도 있다.
std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
스트림에 남아 있는 모든 문자를 무시하여 버퍼가 깔끔하게 비워진다.
반응형'C++' 카테고리의 다른 글
map (0) 2021.07.11 입출력 조작자, 포맷 함수 (0) 2021.07.11 stoi() - string to int (0) 2021.07.06 멀티스레드 환경에서 vector 사용, pair (0) 2021.07.06 stack (0) 2021.06.01