|
안녕하십니까? 레조입니다.
C함수 중에도 있는것같지만 지금 떠오르지 않으니 일단 istream_withassign Class의 멤버를
하나 적어봅니다.
ignore( MAX, DELIM );
: 구분자(DELIM)가 나타날때까지 MAX만큼 제거
키보드나 디스크에서 읽은 입력에서 여분의 문자가 남게되면 입력 스트림에 남으며 이것은
다음 입력 연산에 원래의 목적이 아닌데도 전달된다.
이런 불필요한 줄을 없애려면 istream의 ignore( MAX, DELIM ) 구성원 함수를 사용하며
이것은 지정된 구분 문자까지(DELIM) 포함하여 최대 MAX 문자를 읽어서 제거한다.
예)
cin.ignore( 10, '\n' );
예제 코드)
#include <iostream.h>
void main()
{
int I;
// 숫자만 입력 ( 엔터만 입력하면 내려감 )
while(1) {
cout << "\nEnter an integer: ";
cin >> I;
if( cin.good() ) {
// cin.ignore( 10, '\n' );
break;
}
cin.clear();
cout << "Incorrect input";
cin.ignore( 10, '\n' );
}
cout << "integer is " << I << endl;
// 입력이 없는 입력 처리
while( 1 ) {
cout << "\nEnter an integer : ";
cin.unsetf( ios::skipws ); // 공백을 무시하지 않음
cin >> I;
if( cin.good() ) {
// cin.ignore( 10, '\n' );
break;
}
cin.clear();
cout << "Bad";
cin.ignore( 10, '\n' );
}
cout << "Good";
}
if문 안에보면 cin.ignore()부분을 주석 처리했습니다.
입력할때 222 222 222처럼 한번에 여러개 입력하면 다음 cin에서 입력 스트림에 남은
내용을 그대로 출력하므로 문제가됩니다.
(물론 주석을 제거하면 문제없습니다.)
C 함수를 찾는다면 C++을 내것으로 (레퍼런스편)을 추천합니다.
레퍼런스중에서 그나마 예제도 있고 설명도 한국적(??)이네요. ^^;
박석순 님이 쓰신 글 :
: 입력큐에 남아있는 모든 문자를 지우려면 무슨 메서드를 써야됩니까?
|