계산기를 만들다가, double firstNum = nextDouble();
으로 더블형에 대한 입력을 받으려고 했다. 그런데 숫자를 입력하고 엔터를 클릭한 순간, 다음 입력을 받아야할 것까지 받아버렸다.
(37행을 주석한 것을 잘 보자.)
하나만 입력을 받아야하는데 개행문자까지 입력받아서 문제가 된 것이다.
nextDouble()
메서드 이후에 남아있는 개행문자를 받을nextLine()
을 추가해주자. (값을 저장할 필요는 없다.)nextInt(), nextDouble() 같은 메서드를 사용한 이후 String을 입력받기 위해 nextLine()을 사용하면
버퍼에 남아있는\n
(Enter값)을 읽어들이기 때문에 nextLine() 메서드가 바로 리턴해버린다.
그러므로 nextLine()을 호출하기 전에 nextLine()을 한번 써주면
버퍼에 있는\n
읽어버리므로 그 다음 문자열이 잘 읽힌다.
- 윈도우 : CRLF(
\r\n
)- 유닉스 : LF(
\n
)- 맥 : CR(
\r
)
(CR은 13, LF는 10이다.)
⭐맥, 리눅스에서는 저렇게 받아주지 않아도 괜찮은 것 같다. (개행 문자가 윈도우에서만 13, 10을 동시 출력하기 때문인듯?)