어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다. 초승달 모양 버튼 : `화이트/다크 모드` 전환 |
1. cin의 입력 확인
C++에서는 `cin`을 통해 키보드 입력을 받을 수 있습니다. 이때 입력받은 값을 `>>` 연산자를 통해 변수에 저장합니다. 만약 입력받은 값이 문자 또는 문자열이고, 저장하는 변수의 자료형이 정수형 또는 실수형과 같은 경우 입력 오류가 발생합니다.
`cin` 내부에서 입력받는 값이 잘못된 입력으로 확인되는 경우 `failbit` 내부 상태 플래그가 설정됩니다. 이때 `cin`은 입력 실패로 `false` 값을 반환합니다. 또는 `cin.fail()` 함수를 통해 실패 여부를 확인할 수 있습니다.
int bettingMoney = 0;
cin >> bettingMoney; // "abc" 문자열 입력
if (cin.fail()) { // 숫자가 아닌 잘못된 입력인 경우 fail() 함수에서 True 반환
}
/* 또는 아래와 같은 방법도 가능
* if (!(cin >> bettingMoney)){ // 숫자가 아닌 값을 입력한 경우 false 반환
*
* }
*/
2. `cin` 내부 입력버퍼 초기화하기
`cin`에 잘못된 값이 들어가거나 또는 엔터와 같이 특수한 개행문자가 입력된 경우, 이러한 값들은 모두 입력버퍼에 고스란히 저장됩니다. 그래서 다음 입력에 영향을 줄 수 있기 때문에 입력에 대한 처리가 끝나면 반드시 입력버퍼를 비워주는 것이 좋습니다.
다행히 `cin`에는 이를 처리할 수 있는 함수가 있으므로 입력이후에 해당 함수를 호출하면 됩니다.
#include <iostream>
using namespace std;
int main() {
int number;
cout << "숫자를 입력하세요: ";
while (!(cin >> number)) {
// 입력이 실패했을 경우, cin의 상태를 리셋하고 오류 메시지 출력
cin.clear(); // 실패 상태 리셋
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 입력 버퍼 비우기
cout << "유효하지 않은 입력입니다. 숫자를 입력하세요: ";
}
cout << "입력한 숫자는: " << number << endl;
return 0;
}
`cin.clear()` 함수를 통해서 내부 플래그 상태를 초기화합니다. 그리고 `cin.ignore()` 함수를 통해서 입력 버퍼를 초기화합니다. 이때 함수 파라미터로 두 값을 전달하는데, 첫 번째 `numeric_limits<streamsize>::max()` 이 부분은 입력 버퍼의 모든 내용을 초기화하겠다는 의미이고, 두 번째 `\n`은 입력 버퍼를 초기화를 어디까지 수행할지 지정합니다. 즉, `\n` 개행 문자를 만날 때까지 모든 입력 버퍼의 내용을 초기화합니다.(개행 문자 포함)
🔸만약 `Windows.h` 와 같은 헤더를 포함하는 경우 `max()` 키워드가 겹쳐서 오류가 발생할 수 있습니다. 이때는 맨 상단 첫 번째 줄에 `#define NOMINMAX`를 적어주면 오류가 발생하지 않습니다.
구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊
감사합니다.