Объясните, пожалуйста, почему, если я буду нажимать следующие клавиши по очереди: {a,enter,b,enter,q, enter}, то я увижу ужасно странный вывод, который отделяет предыдущий ввод от нынешнего ~пятью сносами строки?
Код:
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
char c;
do {
c = (char)in.read();
System.out.println(c);
} while (c!='q');
Ожидание:
a
a
b
b
q
Реальность:
a
a
b
b
q
q
Даже если думать, что при нажатии на enter отправляется ещё и непосредственно \n в поток, то вывод должен быть такой после первой введённой буквы:
a
a
b...
Т.е. от куда ещё выводится один снос строки?...
Смешно ещё, что такой код будет давать ожидаемый результат:
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
String s;
do {
s = in.readLine();
System.out.println(s);
} while (!s.equals("q"));
С Вашего первого примера у меня выводит, если "слушать" коды то:
a (сам ввод в консоль)
97 (код буквы в ASCII)
10 (LF, код переноса строки) // далее ниже следующие символы
b
98
10
q
113
Предполагаю, что т.к char это один символ, то и перенос строки \n (исходит, вероятно, от Enter) выводится при печати как отдельный символ. Если использовать метод без переноса строки, а именно System.out.print(), то:
a
a
b
b
q
q
Если в кодах:
a
9710b
9810q
113
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости