안녕하세요. 조교 이은헌입니다.
fflush함수에 대하여 먼저 이야기 했어야하는데 깜빡하고 이 부분을 이야기 안 해서 그런것 같습니다.
코드에서 fflush함수를 사용한 이유를 작성자의 의도를 살펴보면 2가지가 있다고 보입니다.
1. 처음에 숫자를 입력하고 ₩n을 입력할 때 getchar에서 ₩n을 받는 것을 방지하기 위해.
2. 위에서 설명한 ())()()같이 끝날 경우 )를 만나서 break로 반복문을 빠져나갈 때 뒤에 오는 ()()를 버리기 위해서
그런 의도에서 봤을 때 이 코드는 문제가 없어보입니다. 실제로 커맨드창에서 사용자가 입력을 해보면 제대로 작동될 것이라고 생각됩니다.
하지만 사용자가 값을 입력하는 것이 아니라고 할 경우 문제가 발생합니다.
제가 이 시스템을 만든건 아니라서 정확히 어떻게 작동하는지 알 수는 없지만
사람처럼 값을 하나 입력하고 ₩n을 통해 다음 입력값을 입력하는 것이 아니라 모든 입력을 한꺼번에 입력하게 됩니다.
예를 들어 입력이
2
())()
Test
일 경우 시스템적으로는
2₩n())()₩nTest
가 한꺼번에 입력되게 됩니다
이 경우 )을 보고 반복문을 빠져나가서 fflush를 만날경우 뒤에 있는 입력값이 전부 flush될 것입니다.