입력이 끝날 때까지 A+B를 출력하는 문제. EOF에 대해 알아 보세요.
언제 끝날지 모름
문제의 정답을 공개하기 전에 내가 생각했던 과정을 적어본다.
문제의 문제는 종료 조건을 모른다는 것이다.
EOF 찾아보라는 설명을 못 보고 입력의 예외처리를 위해서 C언어에서 try except문과 비슷한
try throw catch문을 찾아보았다..
사실 다 작성하고 ctrl + c를 통해 강제종료 하면서 테스트 해봤는데.
여기서 종료하는건 ctrl + c가 아니라 ctrl + z였다.
암튼 try throw catch문으로 풀기는 까다로웠다.
그리고 EOF와 scanf함숫값에 대해 알았다.
EOF와 scanf의 함숫값
사실 EOF라는 개념을 예상하긴 했다.
ASCII 코드를 보면 나와있는 1번부터 뭐시기~
그런거에 있을 거 같았다.
EOF는 End of File의 약자로 파일의 끝을 의미한다.
scanf 함수는 입력에만 사용되는 줄 알았으나 이 함수도 반환값이 있다.
입력한 개수를 반환한다.
예시로
#include<stdio.h>
int main() {
int a,b,c;
printf("%d\n",scanf("%d %d",&a,&b));
printf("%d\n",scanf("%d %d %d",&a,&b,&c));
return 0;
/*
1 2 (입력)
2 (출력)
1 2 3 (입력)
3 (출력)
*/
}
예시가 좀 웃기긴 하다.
이런 식으로 입력한 인자의 개수를 출력한다.
또한 scanf 함수는 EOF를 읽으려고 할 때에 -1을 반환한다.
읽으려고 할 때에 반환한다는 것에 유의하면,
#include<stdio.h>
int main() {
int a,b;
int arr[10000];
int cnt=0;
int i;
while(scanf("%d %d",&a,&b) != -1) {
arr[cnt] = a+b;
cnt++;
}
for(i=0; i<cnt; i++) {
printf("%d\n",arr[i]);
}
return 0;
}
이렇게 코드를 만들었다.
EOF는 -1을 뜻하므로 -1 대신 EOF를 넣어도 된다.
끝에 도달하고도 읽으려고 한다는 말에 주목해서 (사실 나도 완전히 이해는 못한거 같다)
1 1
2 3
3 4^z
의 결과와
1 1
2 3
3 4
^z
의 결과를 비교해보면 전자는 아무것도 출력되지 않는다.
이거랑 관련이 있지 않을까.
이렇게 문제를 풀었다 짜잔.