pppqqqpq   3년 전

코드는 간단하게 짰습니다.

정답 통과도 나왔구요. 하지만 EOF와 cin.eof()의 작동방식에 대해서 잘 모르겠는게 있습니다.

프로그램 실행 후 콘솔에서 입력으로

A

B

^Z

와 같이 입력하면 아무 문제 없이 출력이 됩니다. (입력도 잘 받구요.)

(예제1)

그런데, 

A

B^Z

와 같이 콘솔에서 ctrl+z를 통한 EOF 입력시에 독립적인 줄에 EOF만 입력해주는 것이 아닌 다른 문자와 함께 EOF가 들어가면 입력을 계속 받습니다. 코드상에서 cin.eof()도 true가 되지 않고 false로 유지되면서 입력을 계속 받습니다.

이 상태로 입력을 추가로 받고 EOF를 독립적인 라인에 넣어주면 입력받는 것이 끝나고 출력을 하게 됩니다.

이때 출력도 예상한 대로 되지 않습니다.

예를 들어.

(예제2)

A^ZB

(빈 라인)

C

^Z

와 같이 입력시 출력으로

A→

C

가 출력됩니다. B는 사라졌으며 화살표가 출력됩니다.

신기한 것은 ^Z 앞에 아무 문자 없이 ^Z 입력 후 엔터가 아닌 문자를 입력하면 cin.eof()가 true로 바뀌어 입력 받는 것이 끝납니다.

(예제3)

A

^ZB

와 같이 입력시 출력으로

A

(빈 라인)

이 출력됩니다.


cin.eof()가 작동하는 방식이 정확히 어떻게 되는거죠?

처음에는 cin 입력 buffer에서 EOF가 있는지 확인하는줄 알았는데 예제1와 예제2를 보면 그런 것 같지 않습니다.

EOF가 입력되는 순간 cin.eof()가 true로 변하는줄 알았는데 예제 1, 2를 보면 그렇지 않습니다.

왜 예제3번처럼 ^Z가 가장 앞에 올때만 EOF로 인식하여 끝나는 것인가요?

댓글을 작성하려면 로그인해야 합니다.