반응형
cin.ignore()
cin.ignore함수는 첫번째 parameter 개수만큼 문자를 읽어온 뒤 버리거나,
두번째 parameter(delim)에 해당하는 문자를 만나면 해당 문자까지 읽고 버린다.
둘중 먼저 만족하는 조건을 따르게 된다.
int main()
{
int x;
while (true)
{
cout << "숫자 입력 : ";
cin >> x;
if (cin.fail())
{
std::cin.clear();
std::cin.ignore(32767, '\n');
cout << "try again" << endl;
continue;
}
else
{
cout << "x is " << x << endl;
break;
}
}
return 0;
}
여기서 32767은 16비트 signed integer의 최대값을 넣은것이다.(적당한 수)
대신 numeric_limits<streamsize>::max()
를 넣어도 좋다.
cin.fail(), cin.clear()
cin.fail()함수는 숫자형 변수에 문자를 넣으려는 시도가 이루어지거나,
변수의 최대값을 넘어선 값을 입력받으면 1(true)를 반환한다.
보통 cin.fail()을 사용하고 cin.clear()를 사용하는데,
clear 함수는 내부 상태플러그를 초기화시켜 cin이 올바른 동작을 이어나가게 해준다.
반응형
'C++' 카테고리의 다른 글
6-2. 포인터의 기본적인 사용법, 널 포인터 (0) | 2024.02.18 |
---|---|
6-1. C언어 스타일 배열 문자열(strcpy, strcat, strcmp) (0) | 2024.02.17 |
5-2. C++ 난수 만들기 (0) | 2024.02.05 |
5-1. C++ switch-case, do-while (0) | 2024.02.03 |
4-3. C++ 자료형에게 가명 붙이기 (type aliases), 구조체 (struct) (0) | 2024.02.02 |