https://www.acmicpc.net/problem/10951
단순한 숫자합 출력 문제로 보인다. 그런데 여기에 함정이 숨어있다! 그건 바로 '숫자 몇 개를 입력받는지 알 수 없다'라는 것이다. 이렇게 입력을 받을 때 더 이상 읽을 수 있는 데이터가 없을 경우, EOF(End Of File, 파일의 끝)을 활용할 수 있다.
이 문제에서는, 읽을 수 있는 데이터가 더 이상 존재하지 않을 때 반복문을 종료할 것을 요구하고 있다. 참고로 '시점'을 정확히 파악해야 하는데, 파일의 끝까지 읽고난 뒤에 '그 다음 파일을 읽으려고 할 때' 읽을 데이터가 없다면 EOF가 되는 것이다.
따라서 EOF를 활용한 코드는 다음과 같다.
#include <iostream>
using namespace std;
int main(){
int a, b;
while(!(cin >> a >> b).eof()){
cout << a + b << endl;
}
return 0;
}
(cin >> a >> b)가 eof 상태가 아니라면 두 수의 합을 입력한다. eof 상태라면 반복문이 종료된다.
다른 방법도 있다.
#include <iostream>
using namespace std;
int main(){
int a, b;
while(cin >> a >> b){
cout << a + b << endl;
}
return 0;
}
eof를 활용하지 않았다. (cin >> a >> b)가 정상 상태면 true, 아니라면 false를 반환하여 반복문을 실행한다.