스캐너 개행오류

따라뚜뚜루·2024년 6월 27일

소스를 만들던중에 갑자기 내 생각과 다른 진행이 일어나서
당황했기에 해결과정을 만들었다.

int n = sc.nextInt();

처음에 이렇게 n의 갯수를 받고 그 후

String input = sc.nextLine();

문자열을 받아야하는데 이상하게 위의 코드가 실행되지 않는것이었다.

알고보니 sc.nextInt()메서드는 숫자를 읽고 남아있는 개행문자를 버퍼에 남겨둔다는 것이었다.

이는 nextLine() 메서드로 전체 줄을 읽을 때 문제가 될 수 있다. nextLine()은 버퍼에 남아있는 개행 문자를 읽고 빈 문자열을 반환하기 때문이다.

예를 들어
사용자가 5를 입력하고 엔터를 누르면 5\n이 입력되는데, (참고로 enter 값이 \n다.) nextInt()는 5만 읽고 \n은 남겨둔다. 다음에 nextLine()을 호출하면 남아있는 \n을 읽게 되어 빈 문자열을 반환한다.
그렇기에 나의 String input은 빈 문자열을 반환받게 된 것이다.

해결 방법은 sc.nextLine(); 한 번 더 호출 한 뒤에 남아있는 개행문자를 제거하면 된다.

int n = sc.nextInt();
sc.nextLine(); // 개행문자 제거
String input = sc.nextLine();

그러면 input에 정상적으로 값을 입력할 수 있다.

profile
나의 코딩일지!! , 일상일지 -> https://blog.naver.com/ieiedong

0개의 댓글