알고리즘은 생각할 필요도 없이 간단한 문제이지만 c++에서 eof에 대한 개념을 처음 접해서 정리해본다. (c에서 read해본 경험만 있었음)
이 문제는 입력의 끝을 알 수 없다는 특징이 있다. 이런 경우 입력 스트림의 끝을 입력의 끝으로 봐야 하는데 이 때 EOF(end of file)을 확인하면 된다.
1234(eof)와 같은 파일이 들어왔을 때 입력스트림의 상태는 다음과 같다.
read | bool |
---|---|
1 | false |
2 | false |
3 | false |
4 | false |
(EOF) | true |
파일을 한번 읽은 뒤에 다시 입력스트림에 접근하려고 할 때 EOF라면 true를 반환하게 된다. 즉 값의 끝인 4에 도달했다고 true인게 아니라 그 다음에 다시 접근하려고 할 때 true를 반환하는 것이다.
cin 입력 스트림에서 eof를 발생시키려면 eof()
를 사용하면 된다.
cin.eof()로 boolean값을 확인할 수 있다.
다시 정리하면 eof를 올바르게 사용하기 위해 우리가 원하는 값을 읽은 뒤에 eof를 시도해야 하는 것이다.
따라서 아래의 식은 a
와 b
변수를 입력스트림으로 읽은 뒤에 eof를 실행한다.
싱글벙글
#include <iostream>
using namespace std;
int main(){
int a,b;
while(!(cin>>a>>b).eof()){
cout<<a+b<<'\n';
}
return 0;
}