본문 바로가기

Language/C++

cin 과 제어문과 합체!!


상당히 유용한 코드라고 생각되어 블러그에 올리는데 딱히 줄만한 제목이 마땅치가 않다..;;;

이름이 따로 있을지는 모르겠지만 모르니까 일단 페스...

while(cin >> x){}

처음 이 문장을 보고 단순하게 생각을 했다. x의 값이 있다면 true가 리턴되는 거니까 루프를 도는거지...라고 생각을 했다. 하지만 이 구문은 상당히 유용하게 사용된다.

일단 합을 구하는 프로그램에서

int sum = 0, x = 0;
while(cin >> x)
{
         sum += x;
}

라고 한다면 콘솔창에서 스페이스 로 구분하여 입력을 구별한뒤 루프를 돌게 된다.
원래 while함수는 불변식을 가지고 bool대수를 비교한다. true면 루프를 돌지만 false면 루프를 종료한다.

여기서 cin을 조건식으로 사용한다는 것은 cin으로부터의 마지막 읽기 시도가 성공했는지를 테스트하는 것과 동일하다는 것을 알 수 있다.

스트림으로부터 읽기 시도가 성공하지 않는 다음의 여러경우가 있다.

-입력 파일의 끝까지 읽었을 경우
-읽으려는 변수의 타입과 호횐되지 않는 입력이 드러왔을 경우, 이런한 경우는 int를 읽으려고 했는데, 숫자가 아닌 다른 값을 읽었을 때에 해당한다.
-시스템이 입력 장치에 대한 하드웨어 오류를 감지했을 경우


위 예제 소스와 같은 경우 while의 루프를 빠져나가려면 C++ 구현시스템 마다 다른데
End-Of-File 을 알리고 엔터를 치게 되면 루프는 false값을 감지하여 빠져나가게 된다.
(Microsoft Windows 에서는 Crtl + z 이며, 유닉스 또는 리눅스는 D키를 누르면된다.)

int sum = 0, x = 0;
while(cin >> x)
{
         sum += x;
}

cout << sum<< endl;

input : 1 2 3 4 ^Z(EOF)
output : 10