본문 바로가기

Coding Tests/백준 온라인

( C ) 백준 -10951번 <EOF 사용>


 <오답>

#include<stdio.h>
int main(void)
{
	int A, B;
	for (int i = 0; ;i++)
	{
		scanf("%d %d", &A, &B);
		printf("%d\n", A + B);
	}
	return 0;
}

 출력초과가 나올걸 알면서도, 작성한 코드인데 이상태에서 종료의 조건이 뭐가 될 수 있을까 꾀 오래 고민했었다.

 

<정답>

#include<stdio.h>
int main(void)
{
	int A, B;
	while (scanf("%d %d", &A, &B) != EOF)
	{
		printf("%d\n", A + B);
	}
	return 0;
}

 

<해설>

문제를 보면 테스트케이스의 종료조건이 명시되어있지 않다. 그래서 문제를 풀때 어떻게 종료조건을 설정해 줄 수있을 까 많이 고민을 하였다. break도 고민하여 보았고 배열을 사용해 볼까 생각해봤지만, 테스트케이스가 얼마의 수인지 알 수 없어 소용이 없었다. 그래서 해당 문제를 검색해 EOF라는 존재를 알게 되었는데,

EOF(End of file)란 파일의 끝을 표현하기 위해 매크로로 정의된 상수를 의미한다. C 에서는 항상 -1을 반환한다. 

주로 입력이 없을때 파일을 종료하기 위해 사용된다고 한다.

 

EOF에 대해 조금 더 알아보았다.

운영체제에서 파일의 끝을 탐지하는 방법은 운영체제마다 약간씩 다르다.

하지만 C언어는 운영체제와 상관없이, 파일의 끝에 도달했을 때 언제나 특별한 값을 반환하도록 해야하는데,

그 값을 EOF(End Of File)라고 하며, 실제로 이 값은 -1을 나타낸다고 한다.

 

 

http://www.tcpschool.com/c/c_string_io