문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
각 테스트 케이스마다 A+B를 출력한다.
<풀이>
#include <stdio.h>
int main()
{
int a, b;
while (scanf_s("%d %d" ,&a, &b) != -1)
{
printf("%d\n", a + b);
}return 0;
}
End-of-file에 대한 이해
주어진 입력 파일만 갖고 입력을 받을 때 더이상 읽을 수 있는 데이터가 없는 경우 즉, 파일의 끝일 때 이를 EOF(End Of File) 이라고 한다.
위 문제 입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하라는 것이다. (참고로 우리는 일상적으로 문장의 끝을 Enter로 치지만, Enter(개행) 또한 하나의 '문자'다. Ascii 코드표를 보면 LF가 눈에 보이지는 않지만 개행을 하는 값이다.)
즉, 입력 스트림이 더이상 읽을 것이 없는 파일의 끝에 도달했을 때를 처리해야한다는 것이다.
파일의 끝까지 읽었다고 EOF가 되는 것이 아니다. 끝까지 읽고난 뒤 그 다음 파일을 읽으려 할 때 읽을 데이터가 없을 때 EOF가 되는 것이다. (시점을 정확히 파악해야한다.)
예로들어 이렇다.
abcd<EOF>
위 순서대로 진행하면, 이렇게 진행된다.
단순히 d까지 읽었다고 EOF가 되는 것이 아니라 끝에 도달 한 후 더 읽으려고 할 때 EOF가 된다고 보면 된다.
참고로 에디터에서는 입력 파일을 따로 생성하여 읽지 않는 한 일반적인 키보드에서는 EOF키가 없어 EOF(입력 끝) 상태를 전송할 수가 없다.
그 대신 키맵이 따로 있는데, 콘솔에서 윈도우의 경우 CTRL + Z를 입력해주면 되며 리눅스(유닉스) 계열은 CTRL + D를 눌러주면 된다.
scanf
while(scanf_s("%d %d", &a, &b) != -1)