본문 바로가기
프로그래밍/C++

putback(), peek()

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 15.




puback(char type) char타입을 꺼낸다고 보면 된다.

예제로 이해 하는것이 빠를듯,

#include <iostream>

void main()
{
	char c[10], c2, c3;

	// 입력 값으로 "qw"를 입력하면, 
	c2 = std::cin.get( );	// c2에 'q'
	c3 = std::cin.get( );	// c3에 'w'가 들어 가게 된다.
	std::cin.putback( c2 );	// putback을 사용해서 'q'를 꺼내고
	std::cin.getline( &c[0], 10 );	// c에 'q'만을 삽입하게 된다.
	std::cout << c << std::endl;	// 출력하면 'q'만 나옴
}


여기서 주의 할 점은 왜 c3를 만들어 놨냐는 건데
디버그로 따라가 보니 별 의도는 없었고,
입력 후 엔터를 칠때 개행 값이 들어 가더라,
그래서 사실 getline으로 받은 배열 c에는 아무 값도 들어가지 않아야 하지만
그전에 putback( c2 )를 해주었기 때문에
c에 q만 들어 가는것을 알 수 있었음.

사실 이럴때 쓰라고 있는건 아닌거 같고,
특정 값을 꺼내서 다시 집어 넣기 위한 용도 인거 같은데, 언제 어떻게 쓸지는 더 생각해 봐야겠다.

peek();
이 함수도 사실 생소한데, putback()함수를 보다 보니 이런 함수도 있다고 해서 추가로 조사해 보았다. 일단 예제를 보자

 

#include <iostream>

void main()
{
	char c[10], c2;
	std::cout << "Type 'abcde': ";	// 입력값을 "abcde"를 넣었을 때

	c2 = std::cin.peek( );			// cin을 사용해서 c2의 a가 들어 가기 때문에
	std::cin.getline( &c[0], 9 );	// 실제론 "bcde"가 들어가야 할것 같지만

	// 출력해 보면 c에 "abcde"가 들어 갔다는 것을 알 수 있다.
	std::cout << c2 << " " << c << std::endl;
}


보면 알 수 있겠지만 실제로 출력을 하면 c2에 a, c에 "abcde"가 들어 간걸 확인 할 수 있다.
지금 처럼 문자열을 받으면서 동시에 맨 앞의 문자를 c2에 넣는 다거나,
std::cin.peek(); 를 중첩으로 사용해서 c2, c3, c4에 동시에 값을 넣는다거나 하는 용도로 쓰이는 것 같다.
그런데 사실 결론만 따지면, putback나, peek나 크게 모르더라도,
단순히 그냥 앞에서 때온다거나 해서 간단하게 코딩으로 해결 할 수 있을텐데 구지 써야 할까? 라는 의문도 생긴다.
어차피 변수는 선언하고 사용하는데 말이다.
좀 많은 생각을 하게 했던 두 함수.

'프로그래밍 > C++' 카테고리의 다른 글

namespace(이름 공간)  (0) 2010.03.15
inline 함수  (0) 2010.03.15
디폴트 매개변수  (0) 2010.03.15
함수 오버로딩 (overloading)  (0) 2010.03.15
cout, cin, endl  (0) 2010.03.15