티스토리 뷰

728x90
반응형

C++ 코드를 작성하면서 cin과 getline을 통해 입력을 받을 수 있다.

cin은 공백이 아닌 값이 나올 때까지 공백을 무시하다가 공백이 아닌 값을 공백이 나올 때까지 받아들인다. 마지막에 출현한 공백을 발견한 cin은 해당 공백을 버퍼에 그대로 남겨 놓는다.

getline() 함수(cin.getline(), string의 getline())는 delimit이 나올 때까지 입력을 받고 해당 delimit은 입력으로 받아들이지 않고 버퍼에서도 제거한다. delimit을 의도적으로 작성하지 않으면 '\n' 개행문자가 delimit으로 기본값으로 지정된다.

cin과 getline함수는 각각 연속해서 사용하는 것은 문제가 없지만 서로 혼용하는 경우 원하지 않는 결과를 얻을 수 있다.

cin을 먼저 쓴 후 getline을 사용할 때가 대표적인 사례이다. 

만약 getline의 delimit이 따로 설정되지 않아 '\n' 값을 가지게 된다면 cin이 버퍼에 남겨둔 '\n'값을 읽고 그저 '\n' 문자만 버퍼에서 제거하고 아무 값도 저장하지 않은 채 getline 함수가 종료되기 때문이다. 

이러한 현상을 해결하기 위해 cin.ignore() 메소드를 사용해야 한다. 해당 메소드는 cin 버퍼의 맨 앞의 1개의 문자를 제거할 수 있다.

728x90
반응형
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함