다시 질문 드립니다

kudus66 Reply 9 years 33 weeks ago
답변 감사합니다! 말씀해주신 테스트케이스인 ())()() 로 확인을 해보았는데 정상적으로 N이 출력됩니다. 다른 케이스에서 걸린 것 같은데.. 혹시 알 수 있을까요? *별개로 해주신 이야기 감사합니다! 앞으로 코드를 짤 때 break을 최대한 자제하도록 하겠습니다.
booksky Reply 9 years 33 weeks ago
안녕하세요. 조교 이은헌입니다. fflush함수에 대하여 먼저 이야기 했어야하는데 깜빡하고 이 부분을 이야기 안 해서 그런것 같습니다. 코드에서 fflush함수를 사용한 이유를 작성자의 의도를 살펴보면 2가지가 있다고 보입니다. 1. 처음에 숫자를 입력하고 ₩n을 입력할 때 getchar에서 ₩n을 받는 것을 방지하기 위해. 2. 위에서 설명한 ())()()같이 끝날 경우 )를 만나서 break로 반복문을 빠져나갈 때 뒤에 오는 ()()를 버리기 위해서 그런 의도에서 봤을 때 이 코드는 문제가 없어보입니다. 실제로 커맨드창에서 사용자가 입력을 해보면 제대로 작동될 것이라고 생각됩니다. 하지만 사용자가 값을 입력하는 것이 아니라고 할 경우 문제가 발생합니다. 제가 이 시스템을 만든건 아니라서 정확히 어떻게 작동하는지 알 수는 없지만 사람처럼 값을 하나 입력하고 ₩n을 통해 다음 입력값을 입력하는 것이 아니라 모든 입력을 한꺼번에 입력하게 됩니다. 예를 들어 입력이 2 ())() Test 일 경우 시스템적으로는 2₩n())()₩nTest 가 한꺼번에 입력되게 됩니다 이 경우 )을 보고 반복문을 빠져나가서 fflush를 만날경우 뒤에 있는 입력값이 전부 flush될 것입니다.