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