• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

std::cin.clear() 의 기능에 대한 질문입니다.

21.06.10 17:48 작성 조회수 866

0

안녕하세요. 좋은 강의와 매번 친절한 답변 덕분에 좋은 환경속에서 공부하고 있습니다. 감사합니다.

질문이 있어서 글을 남깁니다.

std::cin.clear(); 의 기능에 대한 질문입니다.

해당 기능은 'cin으로 받은 것 중 버퍼에 쌓인 것을 지워준다.' 로 알고 있습니다. 그런데 아래와 같이 코드를 돌렸을 때 

std::cin.clear();를 했음에도 불구하고 버퍼에 아직 쌓여있는것 같아서 이렇게 질문을 남깁니다.

---코드 ---

#include <iostream>

int main()

{

using namespace std;

int x;

int y;

int z;

// 예시로 123 456 789 를 입력함

cin >> x;

std::cin.clear(); //퍼버에 쌓인것을 다 지워준다.

// 버퍼에 있는 것을 모두 지웠으니 입력되지 않을 것으로 기대함

cin >> y;

cin >> z;

cout << x <<" " << y << " " << z <<endl;

return 0;

}

제가 혹시 잘 못 코딩한거라던지

cin.clear() 의 기능에 대해 잘 못 알고 있는게 있을까요?

답변 1

답변을 작성해보세요.

4

안소님의 프로필

안소

2021.06.11

안녕하세요 :) 

cin.clear() 는 버퍼를 비우는 것이랑 상관 없습니다. clear() 역할은 cin 내부 상태 플래그 값을 초기화시키는 것입니다. 

cin 은 현재 입력이 성공적인지 실패인지와 같은 이런 상태를 비트 플래그로 저장을 합니다. clear() 는 현재 입력 실패 상태인지 성공 상태인지를 나타내는 이 "상태"를 초기화 할 때 사용합니다.

버퍼 비우는건 cin.ignore 과 더 가까워보이네요~! 

아! cin.clear() 가 버퍼값을 초기화 하는것이 아니라 상태를 초기화 하는것이었군요. 명확한 답변 감사합니다. 알려주신 덕분에 제대로 이해할 수 있게 됐습니다.