cin

2025. 3. 21. 20:34C++

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;
}

 

 

'C++' 카테고리의 다른 글

소멸자(destructor)  (0) 2025.03.26
힙 / 스택  (0) 2025.03.25
using  (0) 2025.03.21
limits  (0) 2025.03.21
iomanip  (0) 2025.03.20