Я хочу получать ввод с клавиатуры по одному символу за раз.Входные данные могут содержать пробелы, иметь любую длину и не требовать специального символа для обозначения его конца.
Проблема в том, что если я использую InputStreamReader
, он не знает, когдаконец потока достигнут, потому что нет никакого ограниченного размера буфера и специального символа, чтобы сообщить ему, когда достигнут конец ввода.
Я думал, что смогу заставить его работать, когда обнаружил, что InputStreamReader.read() == -1
означает, что конец ввода достигнут.Тем не менее, добавление оператора if для проверки того, что InputStreamReader.read() == -1
не работает, поскольку он никогда не достигает этого случая.
InputStreamReader userInput = new InputStreamReader(System.in);
boolean end = false;
while(! end) {
int c = userInput.read();
if(c == -1) {
end = true;
} else {
System.out.println(c);
}
}
При использовании приведенного выше кода я ожидаю, что после того, как пользователь введет свои данные вконсоль, он печатает код ASCII каждого символа один за другим, а затем завершается.
Однако программа продолжает работать и получать ввод, потому что условие if никогда не выполняется.
Как я могу сообщить программе, когда достигнут конец ввода?
РЕДАКТИРОВАТЬ: я обнаружил, что требования моего назначения позволяют мне использовать символ EOF, чтобы отметить конец ввода, однако, когда я ввожу его в консоль без первого нажатия Enter, программа завершает работу, не читая ни одного из предыдущих вводов.Я использую IntelliJ в качестве своей IDE.