Как исправить чтение символа обратной каретки при использовании метода 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 итерация:

