1. EOF란?
EOF란 End - Of -File을 뜻하는 말로, 파일의 끝에 도달했음을 의미한다. 파일의 끝인 경우에는 TRUE, 파일의 끝이 아닌 경우에는 FALSE를 반환한다.
주의!
마지막 입력에서 판단하는 것이 아니다. 마지막 입력 다음, 더 이상 읽을 데이터가 없을 경우에 EOF가 TRUE를 반환한다.
2. EOF인지 판단하는 방법
① scanf 가 입력받은 인자의 갯수를 이용하기
scanf는 입력받은 인자의 개수를 반환하는 특성이 있다. 예를 들어, scanf(%d, %d, &a, &b); 를 통해 2개의 정수 a와 b를 정상적으로 입력받았다면, scanf의 값은 2가 된다.
int a, b;
//scanf를 통하여 2개의 인자 a와 b가 정상적으로 입력되었다면
while(scanf("%d %d", &a, &b) == 2){
printf("%d\n", a+b);
}
② scanf()의 값이 EOF인지 비교하기
앞서 scanf가 입력받은 인자의 개수를 반환하는 특성이 있다고 설명하였다. 만약 scanf가 올바른 입력을 받지 못했을 경우, scanf는 EOF 를 반환한다.
int a, b;
// scanf의 반환값이 EOF가 아니라면
while(scanf("%d %d", &a, &b) != EOF){
cout << a+b << "\n";
}
참고로 EOF는 -1의 값을 가지고 있다. 따라서 아래와 같이 -1인지 비교하는 것도 가능하다.
int a, b;
// scanf의 반환값이 -1이 아니라면
while(scanf("%d %d", &a, &b) != -1){
cout << a+b << "\n";
}
③ cin.eof() 이용하기 (C++만 가능)
cin.eof()를 사용하여 파일의 끝에 도달했는지 검사한다. 더 이상의 입력이 들어오지 않으면 TRUE를 반환한다.
int a, b;
while(true){
cin >> a >> b;
// 더 이상의 입력이 없다면 (cin.eof()가 TRUE를 반환한다면)
if(cin.eof() == true)
break;
cout << a+b << "\n";
}
'C++' 카테고리의 다른 글
[C++] - map 사용법 정리 (STL) (1) | 2023.12.30 |
---|---|
[C++] - STL(표준 템플릿 라이브러리)에 대하여 (1) | 2023.12.28 |
[C++] - namespace와 using 사용법 (std:: 생략하기) (0) | 2023.12.12 |
[C++] - 1차원, 2차원 배열 동적 할당 (0) | 2023.12.08 |
[C++] - 동적 메모리 할당 (2) | 2023.12.07 |