Содержание
Для вывода данных в консольном режиме используется функция из пакета System. Этот пакет автоматически подключается любым компилятором Java.
ü System.out.print(объект)- выводит строку текста на экран, курсор остается на текущей строке;
ü System.out.println(объект) – выводит строку теста, курсор переходит на следующую строку;
С вводом информации с клавиатуры дело обстоит сложнее, поскольку системный пакет имеет только объект связанный с потоком ввода. Для того, чтобы ввести информацию с клавиатуры нам необходимо связать этот объект с объектом выполняющим чтение потока. Для этого необходимо подключить класс java.io.InputStreamReader, который обеспечивает преобразование данных потока в текстовую информацию. Вся работа с файлами и потоками ввода вывода в случае ошибки генерирует так называемые исключительные ситуации для обработки которых необходимо подключить класс обработчик исключений ввода-вывода java.io.IOException.
Наиболее простым в примером ввода информации с клавиатуры является ввод строки текста. Пример программного кода имеет следующий вид:
// Объявляем переменную в которой будет помещен
// результат ввода информации
// Определяем блок обработки исключительных ситуаций
// Объявляем и создаем объект преобразования данных потока
// В текстовой вид
InputStreamReader is=new InputStreamReader(System.in);
// Объявляем текстовой буфер, длина которого соответствует
// максимальной длине строки.
char buf[] = new char[128];
// После этого в этот буфер производим чтение
// Этот буфер мы преобразовываем к строке
// После этого закрываем блок обработки исключительных ситуаций.
// И описываем поведение системы в случае возникновения
// ошибки при чтении данных
catch (IO Exception e) <
Для ввода числовой информации также необходимо сначала получить строку текста, после чего с помощью класса преобразователя преобразуется к значению числового типа. Для исполнения данной операции необходимо подключить библиотеку обработки ошибок преобразования чисел java.lang.NumbericFormatException и класс – оболочку типа данных, к которой необходимо преобразовать java.lang.Double;
// Объявляем переменную в которой будет помещен
// результат ввода информации
// Определяем блок обработки исключительных ситуаций
// Объявляем и создаем объект преобразования данных потока
// В текстовой вид
InputStreamReader is = new InputStreamReader(System.in);
// Объявляем текстовой буфер, длина которого соответствует
// максимальной длине строки.
char buf[] = new char[128];
// После этого в этот буфер производим чтение
//преобразовываем к вещественному типу
// После этого закрываем блок обработки исключительных ситуаций.
// описываем поведение системы в случае возникновения
// ошибки при чтении данных
catch (IOException e)<
// описываем поведение системы в случае возникновения
// ошибки при преобразовании текстовых данных в
catch (NumbericFormatException e1) <
Поскольку чтение данных с клавиатуры, является достаточно часто используемой операцией, то для удобства в программе обычно создают функции для операций, которые выполняются неоднократно. Рассмотрим это на примере:
// создаем функцию чтения строки
public String read_str() <
// Объявляем переменную в которой будет помещен
// результат ввода информации
// Определяем блок обработки исключительных ситуаций
// Объявляем и создаем объект преобразования данных потока
// В текстовой вид
InputStreamReader is=new InputStreamReader(System.in);
// Объявляем текстовой буфер, длина которого соответствует
// максимальной длине строки.
char buf[] = new char[128];
// После этого в этот буфер производим чтение
// Этот буфер мы преобразовываем к строке
// После этого закрываем блок обработки исключительных ситуаций.
// И описываем поведение системы в случае возникновения
// ошибки при чтении данных
catch (IO Exception e) <
if (a = = null) return “”;
// и функцию чтения вещественного числа
public double read_double() <
// Объявляем переменную в которой будет помещен
// результат ввода информации
// Определяем блок обработки исключительных ситуаций
// И описываем поведение системы в случае возникновения
При запуске программы на Си автоматически открываются пять потоков, основными из которых являются следующие:
Стандартный поток ввода stdin
Стандартный поток вывода stdout
Стандартный поток вывода сообщений об ошибках stderr
Стандартный поток ввода stdin по умолчанию соответствует клавиатуре, а потоки stdout и stderr – экрану монитора.
Для управления вводом-выводом с помощью этих потоков используются ряд функций:
getchar() : ввод с клавиатуры одного символа
putchar() : вывод на консоль одного символа
gets() : ввод одной строки
puts() : вывод одной строки на консоль
scanf() : ввод с форматированием данных
printf() : вывод с форматированием данных
Функции printf и scanf уже рассматиривались ранее, поэтому посмотрим, как применять остальные функции.
Ввод и вывод символов
Для ввода одного символа с клавиатуры применяется функция getchar() , которая имеет следующий прототип:
В качестве результата функция возвращает числовой код введенного символа.
Для вывода отдельного символа на консоль предназначена функция putchar() со следующим прототипом:
Выводимый символ в виде числового кода передается в putchar в качестве параметра, он же возвращается функцией.
Следует сказать, что на самом деле функции getchar() и putchar() полноценными функциями не являются, а определены как макросы в заголовочном файле stdio.h :
При использовании функции getchar следует учитывать, что при печати текста посредством клавиатуры в буфер операционной системы заносятся коды печатаемых символов, а сами символы отображаются на экране. Поучение программой введенного символа из буфера производится с помощью нажатия клавиши Enter.
И если буфер операционной системы не пуст, то при вызове функции getc() она получает очередной символ из буфера. Если же буфер пуст, то происходит чтение байта из потока ввода с помощью системной функции, название которой зависит от операционной системы.
При этом при нажатии клавиши Enter, в буфер также помещается код этой клавиши. То есть если мы введем один символ и нажмем на Enter, в буфере окажутся два числовых кода – введенного символа и клавиши Enter. И это надо учитывать при работе с функцией getchar. В частости, рассмотрим простой, но показательный пример:
Сначала на экран выводится цифра 1, после чего функция getchar ожидает ввода символа. Если после ввода символа мы нажмем Enter, то в буфер будет помещены два числовых кода – введеного символа и клавиши Enter. Поэтому при втором вызове getchar эта функция считывает байт из буфера – то есть числовой код клавиши Enter.
Например, введем при первом вызове функции getchar символ "a", а затем Enter:
Но если при каждом вызове getchar мы будем только нажимать клавишу Enter, тогда в буфер будет заноситься только код этой клавиши, и соответственно программа будет работать, как и ожидалось:
Применим функции getchar и putchar для ввода и вывода символов с клавиатуры:
Функция getchar считывает числовой код символа, который потом выводится в функции putchar. Для вывода из программы необходимо ввести комбинацию клавиш Ctrl+C.
Ввод и вывод строк
Для ввода строки с клавиатуры применяется функция gets() , которая имеет следующий прототип:
Вводимые данные помещаются в массив, на который указывает указатель *s, передаваемый в функцию в качестве параметра. При успешном прочтении строки функция возвращает адрес этого массива s. А в случае ошибки возвращается значение NULL .
При вводе символов функция gets() завершает свою работу при вводе символа ‘
‘, то есть при нажатии на клавишу Enter. Но вместо этого символа в строку записывается нулевой символ ‘