230227 - Scanner 계속 입력 받기

ghltjd369·2023년 2월 27일
0
package org.example;

import java.util.InputMismatchException;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int input = 0;

        while (true) {
            System.out.printf("숫자 : ");

            try {
                // saa
                input = sc.nextInt(); // 대기, 숫자 하나 입력될 때 까지
                sc.nextLine(); // 버퍼를 비운다.
                break;
            } catch (InputMismatchException e) {
                System.out.println("숫자를 입력해주세요.");
            }
        }

        System.out.printf("입력된 숫자 : %d\n", input);

        sc.close();
    }
}

예전에 과제를 할 때 scanner 계속 입력 받는 걸 작성했었는데 타입이 맞지 않는 것을 입력하면
이런 식으로 갑자기 지혼자 급발진하면서 무한루프를 돌아버린다.
왜 그런가 했더니

try {
     // saa
     input = sc.nextInt(); // 대기, 숫자 하나 입력될 때 까지
     sc.nextLine(); // 버퍼를 비운다.
     break;
} catch (InputMismatchException e) {
     sc.nextLine(); // 버퍼를 비운다.
     System.out.println("숫자를 입력해주세요.");
}

잘못된 입력을 했을 때 안에 약간 찌꺼기? 그런게 남아있다고 한다.
그래서 이런 식으로 catch문 안에 버퍼를 지우는 sc.nextLine()을 해줘야 한다.

0개의 댓글