<오답>
#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