# 오답


아래의 코드는 왜 오답이 될까?


viewimage.php?id=3dae&no=24b0d769e1d32ca73cee84fa11d02831cd949b6924735c7cb75a680f5f9d0fd517609e3e75f2421b1a5cc9a44c7aea0c1e941f48fd4eebfc4d


abc(엔터)abc 의 입력을 받고 있다고 하자.

첫 번째 줄인 abc는 제대로 받아지나, 첫 번째 줄 마지막의 (엔터)가 입력에 남아있게 된다.
그 이후, scanf를 사용하면 (엔터)로 인하여 한 글자도 입력되지 않고, 따라서 변환 실패로 인하여 scanf의 반환값이 0이 된다.
따라서 첫 번째 줄만 출력하고 멈추게 된다.


# 오답 2


scanf의 %s는 공백 문자 (탭, 스페이스, 엔터)를 기준으로 나눈다.
따라서 입력에 공백이 있을 경우 아래의 코드는 제대로 동작하지 않는다.


viewimage.php?id=3dae&no=24b0d769e1d32ca73cee84fa11d02831cd949b6924735c7cb75a680f5f9d0fd517609e3e75f2421b1a5cc9a44c78e90d2a3a03b6066cd1a94f


# 오답 3


마지막으로 아래의 Python 3 코드를 살펴보자.


viewimage.php?id=3dae&no=24b0d769e1d32ca73cee84fa11d02831cd949b6924735c7cb75a680f5f9d0fd517609e3e75f2421b1a5cc9a44c29ed096c0fcde053f79d5760


로컬에서 돌려보면 제대로 돌아가는 것 같다. 왜 문제가 생기는 걸까?
Python의 input 함수는 EOF를 만나면 EOFError를 발생한다.
따라서 입력의 마지막 줄을 받은 뒤, 다음 루프에 들어가면 EOFError가 발생해서 stderr에 출력하게 되는 것이다...
이해가 안 되면 아래 짤을 보자. (^Z는 Windows에서 EOF를 나타내는 문자이다)


viewimage.php?id=3dae&no=24b0d769e1d32ca73cee84fa11d02831cd949b6924735c7cb75a680f5f9d0fd517609e3e75f2421b1a5cc9a44c7fef5ea3a296d25b85a14a91

Traceback (...) 이라고 뜨는게 문제이다. stderr에 출력하였으므로 RTE를 받는다.


## 해결책


되도록이면 sys.stdin와 sys.stdout을 사용하도록 하자.


viewimage.php?id=3dae&no=24b0d769e1d32ca73cee84fa11d02831cd949b6924735c7cb75a680f5f9d0fd517609e3e75f2421b1a5cc9a44c2bee58e70bdde0d0e175f5f2