EOF란 (End of File)
입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 (
(int)-1
)을 반환*주의 파일의 끝까지 읽었다고 EOF가 되는 것이 아니라 끝까지 읽고난 뒤 그 다음 파일을 읽으려할 때 데이터가 없을 때 EOF가 되는 것!(시점을 정확히 파악해야함.)
#include <iostream>
using namespace std;
int main() {
int a, b;
while (!cin.eof()) {
cout << a + b << endl;
}
return 0;
}
위와 같이 적으면 틀린다
예로 다음과 같이 입출력을 받는다고 가정하자
char val;
while(!cin.eof()) {
cin >> val;
cout << val;
}
입력 :
a
b
c
d
출력 :
abcdd가 출력된다
이처럼 EOF이 되면 더이상 내부 스트림 상태를 fail로 두고 val 변수에 값을 저장하지 않는다. 즉, val의 상태는 이전 루프의 값을 갖고있게 되는 것이다.
그렇기 때문에 (cin >> a >> b).eof()
방식으로 괄호 안의 cin>>a>>b
를 통해 읽은 후 EOF상태인지를 검사한다.
#include <iostream>
using namespace std;
int main() {
int a, b;
while (!(cin>>a>>b).eof()) {
cout << a + b << endl;
}
return 0;
}