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 |