Метод Read возвращает очередной символ, считанный с консоли. Он ожидает до тех пор, пока пользователь не нажмет клавишу, а затем возвращает результат. Воз вращаемый символ относится к типу int и поэтому должен быть приведен к типу char. Если при вводе возникает ошибка, то метод Read возвращает значение -1. Этот метод сгенерирует исключение IOException при неудачном исходе операции ввода. Ввод с консоли с помощью метода Read буферизуется построчно, поэтому пользователь должен нажать клавишу , прежде чем программа получит любой символ, введенный с консоли.
Ниже приведен пример программы, в которой метод Read используется для
считывания символа, введенного с клавиатуры.
// Считать символ, введенный с клавиатуры.
using System;
class KbIn {
static void Main {
char ch;
Console.Write("Нажмите клавишу, а затем —
Вот, например, к какому результату может привести выполнение этой программы.
Нажмите клавишу, а затем —
Необходимость буферизировать построчно ввод, осуществляемый с консоли по средством метода Read, иногда может быть досадным препятствием. Ведь при нажа тии клавиши в поток ввода передается последовательность символов перевода каретки и перевода строки. Более того, эти символы остаются во входном буфере до тех пор, пока они не будут считаны. Следовательно, в некоторых приложениях приходится удалять эти символы (путем их считывания), прежде чем приступать к следующей опе рации ввода. Впрочем, для чтения введенных с клавиатуры символов без построчной буферизации, можно воспользоваться рассматриваемым далее методом ReadKey.
Для считывания строки символов служит приведенный ниже метод ReadLine. static string ReadLine
Символы считываются методом ReadLine до тех пор, пока пользователь не
нажмет клавишу
Ниже приведен пример программы, в которой демонстрируется чтение строки из потока Console.In с помощью метода ReadLine. // Ввод с консоли с помощью метода ReadLine. using System; class ReadString { static void Main { string str; Console.WriteLine("Введите несколько символов."); str = Console.ReadLine; Console.WriteLine("Вы ввели: " + str); } }
Выполнение этой программы может привести, например, к следующему результату. Введите несколько символов. Это просто тест. Вы ввели: Это просто тест.
Итак, для чтения данных из потока Console.In проще всего воспользоваться мето дами класса Console. Но для этой цели можно обратиться и к методам базового клас са TextReader. В качестве примера ниже приведен переделанный вариант предыду щего примера программы, в котором используется метод Rea.dLine, определенный в классе TextReader. // Прочитать введенную с клавиатуры строку // непосредственно из потока Console.In. using System; class ReadChars2 { static void Main { string str; Console.WriteLine("Введите несколько символов."); str = Console.In.ReadLine; // вызвать метод ReadLine класса TextReader Console.WriteLine("Вы ввели: " + str); } }
Обратите внимание на то, что метод ReadLine теперь вызывается непосредствен но для потока Console.In. Поэтому если требуется доступ к методам, определенным в классе TextReader, который является базовым для потока Console.In, то подобные методы вызываются так, как было показано в приведенном выше примере.
Применение метода ReadKeyВ состав среды .NET Framework включен метод, определяемый в классе Console
и позволяющий непосредственно считывать отдельно введенные с клавиатуры
символы без построчной буферизации. Этот метод называется ReadKey. При нажа
тии клавиши метод ReadKey немедленно возвращает введенный с клавиатуры сим
вол. И в этом случае пользователю уже не нужно нажимать дополнительно клавишу
Ниже приведены две формы объявления метода ReadKey. static ConsoleKeyInfo ReadKey static ConsoleKeyInfo ReadKey(bool intercept)