혹시나 해서 입출력 관련 문제를 풀어봤는데, 정말 못푸는 문제가 나와서 놀랐다. 분명 배웠던 기억이 있었는데,
어느 새인가 기억저편으로 날라갔다..ㅠㅠ...
충격을 뒤로 하고 내용을 정리하자면, 내가 몰랐던 내용은 EOF인데, 이에 대한 간략한 설명이다.
EOF(End of File)이란 파일의 끝을 표현하기 위한 '상수'이고, -1의 값을 가진다.
그래서 파일의 끝을 만났을 때, 매크로로 정의된 EOF 값을 리턴한다.
scanf는 사실 정수형을 반환해주는 반환함수라고 하는데, 평소에는 포맷 형식 갯수를 반환하는데, 파일 끝에 도달하면 EOF라는 값을 반환해준다고 한다. 그리고 윈도우는 ctrl+z를 통해서도 콘솔에서 EOF를 반환해줄 수 있다.
(실제 파일을 binary로 열었을 때 파일의 끝이 -1이나, 16진의 값을 띄고 있진 않는 것 같고, C언어의 표준 라이브러리에서 파일을 인지 하였을 때 넘겨주는 값인 것 같다.)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main(void) {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
cout << a + b << endl;
}
system("pause");
return 0;
}
이 분의 블로그를 보고 어느정도 EOF의 개념을 잡았는데, 아직 모호한 부분이 많아, 한 번 정리를 해보아야겠다,
'역시 내 문제해결 알고리즘은 잘못됐다' 카테고리의 다른 글
백준 1152번 C/C++ (0) | 2020.12.30 |
---|---|
백준 2884번 C/C++ (0) | 2020.12.30 |
백준 2750번 C/C++ (0) | 2020.08.07 |
백준 11721번 C/C++ (0) | 2020.07.15 |
백준 1259번 (0) | 2020.07.13 |