Как исправить чтение символа обратной каретки при использовании метода System.in.read()?

Java - Руководство для начинающих (Герберт Шилдт)

Глава 3. Управляющие инструкции. Пример:

class ForTest {
    public static void main(String[] args)
            throws java.io.IOException
    {
        int i;

        System.out.println("Для остановки нажмите \"S\"");

        for(i = 1; (char) System.in.read() != 'S';)
        {
            System.out.println("Проход: " + i);
            i++;

        }
    }
}

При вводе в консоль символов считывается 2 значения (сам символ и \n).

Происходит 2 итерации цикла. Как исправить так, чтобы при не совпадении с 'S', происходила 1 итерация?

Скрин логов, на котором


Ответы (1 шт):

Автор решения: Witnessium

Проблема решена отбрасыванием символов во входном буфере через цикл do-while:

 class ForTest {
   public static void main(String[] args)
           throws java.io.IOException
   {
       int i;
       char ignore;

       System.out.println("Для остановки нажмите \"S\"");

       for(i = 1;(char) System.in.read() != 'S'; i++)
       {

           System.out.println("Проход: " + i);

           do
           {
               ignore = (char) System.in.read();   //чистка входного буфера
           } while (ignore != '\n');
       }

     System.out.print("Работа программы завершена!");
}

}

Теперь выполняется 1 итерация:

→ Ссылка