2025. 3. 21. 20:34ㆍC++
cin 오류 처리, 버퍼 관리, 다양한 종류의 입력을 효율적으로 다룰 수 있도록 도와준다.
- 입력 오류 처리: cin.clear(), cin.fail(), cin.ignore()
- 문자 및 문자열 입력: cin.get(), cin.getline(), cin >> variable
- 버퍼 관리: cin.peek(), cin.putback(), cin.read()
- 기타 유용한 함수: cin.sync()
1. cin.clear( )
역할: cin의 상태를 정상으로 복구하는 함수. cin에서 오류가 발생하면 failbit나 eofbit가 설정되는데, clear( )를 사용하면 이 상태를 초기화하여 다시 입력을 받을 수 있다.
cin.clear();
2. cin.ignore( )
역할: cin.ignore( )는 입력 버퍼에서 문자를 무시하는 함수. 이 함수는 잘못된 입력 후 남아있는 데이터를 무시하거나, 지정된 개수만큼의 문자를 건너뛰도록 할 수 있다.
std::cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
- numeric_limits<std::streamsize>::max( ): 입력 버퍼에서 가능한 한 많은 문자를 무시
- '\n': 개행 문자가 나올 때까지 무시
3. cin.get( )
역할: cin.get( )은 단일 문자를 입력받는 함수. cin >> variable;과는 달리, cin.get( )은 문자 그대로 입력받으며 개행 문자까지 포함할 수 있다.
#include <iostream>
int main() {
char ch;
std::cout << "한 문자를 입력하세요: ";
std::cin.get(ch); // 한 문자를 입력받음
std::cout << "입력한 문자: " << ch << std::endl;
// 버퍼에 남아 있는 개행 문자를 읽을 수 있습니다.
std::cin.get(ch); // 여기서 또 한 문자를 읽음 (개행 문자일 수 있음)
std::cout << "두 번째 입력 문자: " << ch << std::endl;
return 0;
}
출력
한 문자를 입력하세요: A
입력한 문자: A
두 번째 입력 문자:
* 개행 문자를 입력 버퍼에 남긴다.
4. cin.getline( )
역할: cin.getline( )은 한 줄을 문자열로 읽는 함수입니다. 개행 문자가 나올 때까지 입력을 읽고, 그 문자는 버려진다.
char str[100];
std::cin.getline(str, 100); // 최대 100자까지 입력받기
5. cin >> variable (기본 입력 연산자)
역할: cin >> variable은 공백, 탭, 개행 등의 구분자로 데이터를 읽는다. 따라서 여러 단어로 구성된 문자열을 읽을 때에는 문제가 될 수 있다.
std::string name;
std::cin >> name; // 공백을 기준으로 첫 번째 단어만 입력받음
* 공백이 있는 문자열을 입력받고 싶다면 cin >> 대신 getline()을 사용
6. cin.peek( )
역할: cin.peek()는 입력 버퍼에서 다음에 읽을 문자를 확인하는 함수. 실제로 문자를 읽지는 않지만, 버퍼에 어떤 문자가 들어 있는지 확인
char ch = std::cin.peek();
std::cout << "다음 문자는: " << ch << std::endl;
* 입력 스트림의 첫 번째 문자를 미리 확인하는 데 유용
7. cin.putback( )
역할: cin.putback( )은 문자를 입력 스트림에 다시 넣는 함수. 주로, 입력 버퍼에서 문자를 하나씩 "되돌려" 놓을 때 사용. 이 함수를 사용하면 한 문자만 되돌릴 수 있다.
char buffer[10];
std::cin.read(buffer, 10); // 10바이트 읽기
* 텍스트가 아닌, 바이너리 데이터를 읽을 때 사용
9. cin.sync( )
역할: cin.sync( )는 입력 스트림의 버퍼를 동기화하는 함수. 스트림에 남아 있는 데이터를 처리할 때 유용하며, 보통 입력 버퍼의 데이터를 강제로 비우는 데 사용.
std::cin.sync(); // 입력 스트림 버퍼를 동기화
10. cin.fail( )
역할: cin.fail( )는 입력 오류 상태를 확인하는 함수. 사용자가 잘못된 형식의 입력을 했을 때, cin.fail( )은 true를 반환
int number;
std::cin >> number;
if (std::cin.fail()) {
std::cout << "잘못된 입력입니다." << std::endl;
}