Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 cin 반환 값을 활용해 개수를 알 수 없는 입력 처리하기

프로그래밍을 하다 보면 입력받아야 할 값의 개수가 미리 정해져 있지 않은 경우가 종종 있습니다. 이번 글에서는 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()를 사용해 스트림 상태를 초기화해 주는 것이 좋습니다.