• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

cin.clear() 와 cin.ignore 의 질문

21.01.08 21:47 작성 조회수 597

6

cin.clear(); 와 cin.ignore()의 역활이 뭔가요? 그리고 왜 선생님께선 같이 쓰신건가요?

답변 1

답변을 작성해보세요.

10

안소님의 프로필

안소

2021.01.09

안녕하세요.

cin.clear()는 cin의 상태 플래그를 초기화시키는 역할을 합니다. 플래그는 비트플래그의 그 플래그와 같은 의미에요! cin 객체는 입력받을 때 EOF 가 들어왔거나 에러가 발생했거나 입력이 성공적으로 됐거나 등등 이런 입력 상태들을 비트플래그로 저장을합니다. 입력 오류가 있었다면 현재 fail 비트가 true 인 상태이거나 할텐데 이제 새롭게 입력받을테니 이 플래그 내용들을 전부 초기화해주는 것입니다. cin 객체의 입력 플래그들에 관해서는 18단원쯤 가시면 배우실거에요.

cin.ignore은 입력 스트림을 비우는 역할을 합니다. 예를들어 콘솔창에 "123   456" 을 입력하고 이를 int 로 받았다면, int는 정수만 입력을 받으므로 123만 int 변수에 들어가게 됩니다. 공백+456 은 시스템 내부적으로 입력 스트림안에 남아있는 상태가 되요. 콘솔창에 사용자가 입력하고 엔터까지 쳐야 입력이 되죠 ! 그러므로 더 정확히말하자면 개행문자 '\n' 까지 해서 공백+456+'\n' 까지 입력 스트림 안에 남아있게 되있는 것입니다. 그래서 이런 입력 스트림을 깨끗하게 비워주는 것입니다. 이 같은 작업을 해주지 않았다면 예를 들어 바로 다음 작업에 char 문자를 받는 작업을 한다면 스트림안에 남아있던 이 공백이 그 char 문자 안에 입력이 되겠죠! 이런 의도하지 않은 일이 발생할 수 있기 때문에 비워주는 것입니다.