프로그래밍을 하다 보면 입력받아야 할 값의 개수가 미리 정해져 있지 않은 경우가 종종 있습니다. 이번 글에서는 C++의 cin을 활용하여 개수가 정해지지 않은 입력을 처리하는 방법을 살펴보겠습니다.
가장 단순한 해결책은 반복문을 돌리다가 특정 값이 입력되면 종료하는 것입니다. 하지만 더 깔끔한 방법은 cin >> input의 반환 값을 조건으로 활용하는 것입니다. cin은 숫자가 아닌 값(문자 등)이 입력되면 스트림 상태가 실패(fail)로 설정되어 false로 평가되므로, 이를 이용하면 별도의 종료 신호 없이도 자연스럽게 반복을 멈출 수 있습니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
int input;
int n = 0;
cout << "Enter numbers. (To stop enter any character): ";
while (cin >> input)
n++;
cout << "\nTotal number of inputs entered: " << n;
}
실행 결과
Enter numbers. (To stop enter any character): 5 6 7 2 6 5 j Total number of inputs entered: 6
동작 원리
cin >> input 연산은 istream 객체에 대한 참조를 반환하며, 이 객체는 bool 타입으로 암묵적으로 변환될 수 있습니다. 추출(extraction)이 성공하면 true, 실패하면 false로 평가됩니다. 위 예제에서는 정수형 변수에 문자 'j'를 입력하려 시도했기 때문에 추출에 실패하고, 그 순간 while 루프가 종료되어 지금까지 입력된 개수인 6이 출력됩니다.
참고 사항
표준 C++에서는 main 함수의 반환 타입을 반드시 int로 명시해야 합니다. 또한 cin이 한 번 실패 상태가 되면 이후의 모든 입력 작업도 계속 실패하므로, 루프 종료 후 추가 입력이 필요하다면 cin.clear()와 cin.ignore()를 사용해 스트림 상태를 초기화해 주는 것이 좋습니다.