cin으로 입력받을 때 빈 입력(엔터)이 발생할 경우 예외 처리하기

김민수·2025년 1월 13일

C++

목록 보기
57/68
  • 빈 입력에 대한 예외 처리는 getline()을 사용하여 문자열 길이를 체크하는 방식이 가장 확실하다.
  • cin을 사용할 경우 입력 실패 상태(cin.fail())를 확인하고 스트림을 초기화(cin.clear())한 뒤, 남아 있는 입력을 무시(cin.ignore())하는 방식으로 예외 처리가 가능하기도 하다.
  • getline()과 stoi()를 활용하면 빈 입력뿐만 아니라 문자 입력, 잘못된 형식의 입력도 예외 처리할 수 있어 더 일반적인 입력 처리에 적합하다.

1. getline()과 문자열 길이 체크로 예외 처리

getline()을 사용하면 사용자가 입력한 한 줄 전체를 문자열로 받을 수 있다. 이를 활용해서 빈 입력(길이가 0인 문자열)인지 확인할 수 있다.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string input;

    while (true) {
        cout << "숫자를 입력하세요: ";
        getline(cin, input); // 한 줄 전체 입력 받기

        if (input.empty()) { // 빈 입력 체크
            cout << "잘못된 입력입니다. 값을 입력하세요." << endl;
            continue; // 루프 재시작
        }

        try {
            int number = stoi(input); // 문자열을 정수로 변환
            cout << "입력한 숫자: " << number << endl;
            break; // 정상 입력 시 루프 종료
        } catch (exception& e) {
            cout << "잘못된 입력입니다. 숫자를 입력하세요." << endl;
        }
    }

    return 0;
}


2. cin으로 직접 입력받고 엔터 예외 처리

cin을 사용할 경우, 입력이 실패했거나 엔터만 입력된 경우 입력 스트림을 초기화하고 예외 처리할 수 있다.

#include <iostream>
using namespace std;

int main() {
    int number;

    while (true) {
        cout << "숫자를 입력하세요: ";
        if (!(cin >> number)) { // 입력 실패 여부 확인
            cout << "잘못된 입력입니다. 숫자를 입력하세요." << endl;
            cin.clear();           // 오류 상태 초기화
            cin.ignore(1000, '\n'); // 남아 있는 입력 무시
            continue;              // 루프 재시작
        }

        cout << "입력한 숫자: " << number << endl;
        break; // 정상 입력 시 루프 종료
    }

    return 0;
}
profile
안녕하세요

0개의 댓글