tpfprkem92   5년 전

처음에 테스트케이스의 수를 입력하기 위해 n의 값을 입력하면 콘솔에 0 이 자동으로 출력되고, 이것이 n을 하나 먹어버려서 테스트케이스를 3을 입력해도 2번밖에 테스트케이스를 사용할 수 없습니다. 뭐때문인가요?

djm03178   5년 전

nextInt에서 정수를 하나 입력받은 후 뒤에 개행 문자가 그대로 남아있기 때문에 nextLine이 이 개행 문자 하나만을 읽고 한 줄이라고 인식해서 리턴하기 때문입니다.

tpfprkem92   5년 전

djm03178님 번번히 감사합니다. 그런데 정수 하나를 입력받은 후 개행 문자가 뒤에 남아있다는게 대충 무슨 말씀인지 짐작은 되지만 정확히 모르겠습니다 ㅜㅜ 구글링으로 개행문자를 검색해봐도 줄넘기는 코드만 알려주는 것 같네요. 혹시 괜찮으시다면 조금 더 구체적으로 설명 부탁드려도 될까요?

djm03178   5년 전

프로그램이 입력을 받는 데는 입력 버퍼라는 것을 사용합니다. 외부로부터 들어오는 입력은 먼저 이 버퍼에 쌓이고, 입력 메서드들이 이 버퍼로부터 입력된 문자들을 차례대로 하나씩 꺼내보면서 각자 역할에 맞게 처리를 합니다.

nextInt의 경우 오로지 정수형 하나를 읽어내는 데에 목적이 있습니다. 예제 입력을 예시로 들면 맨 처음에 있는 5 하나를 읽는 거죠. 그런데 그 뒤에는 개행 문자 (엔터 키)가 있습니다. nextInt에게는 이런 문자까지 읽는 역할이 없습니다. 그래서 그 개행 문자 (엔터 키)는 그대로 버퍼에 남겨두고 종료합니다.

하지만 nextLine에게는 이 개행 문자까지 읽어낼 의무가 있고, 개행 문자가 나타나는 순간을 한 줄이 끝난 순간으로 봅니다. 그런데 입력 버퍼에서 맨 처음 문자를 보니, 아까 nextInt가 읽지 않고 그대로 남겨둔 개행 문자가 남아있습니다. 그래서 nextLine은 첫 문자를 보자마자 이게 한 줄이 끝난 줄 알고, 아무 내용물이 없는 문자열을 받아서 그대로 반환하게 됩니다.

tpfprkem92   5년 전

와.. 소름돋았습니다. ㅜㅜ 정말 친절하고 구체적인 설명 너무너무 감사드립니다!!!!!!!!

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