• 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

    댓글

ABOUT ME

공부한 것을 기록하기 위해 블로그를 개설했습니다.

VISIT

/