Чтение онлайн

ЖАНРЫ

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

Для чтения одного символа служит приведенный ниже метод Read .

static int Read

Метод Read возвращает очередной символ, считанный с консоли. Он ожидает до тех пор, пока пользователь не нажмет клавишу, а затем возвращает результат. Возвращаемый символ относится к типу int и поэтому должен быть приведен к типу char. Если при вводе возникает ошибка, то метод Read возвращает значение -1. Этот метод сгенерирует исключение IOException при неудачном исходе операции ввода. Ввод с консоли с помощью метода Read буферизуется

построчно, поэтому пользователь должен нажать клавишу <Enter>, прежде чем программа получит любой символ, введенный с консоли.

Ниже приведен пример программы, в которой метод Read используется для считывания символа, введенного с клавиатуры.

// Считать символ, введенный с клавиатуры.

using System;

class КЫп {

static void Main { char ch;

Console.Write("Нажмите клавишу, а затем — <ENTER>: ");

ch = (char) Console.Read; // получить значение типа char Console.WriteLine("Вы нажали клавишу: " + ch) ;

}

}

Вот, например, к какому результату может привести выполнение этой программы.

Нажмите клавишу, а затем — <ENTER>: t Вы нажали клавишу: t

Необходимость буферизировать построчно ввод, осуществля^емый с консоли посредством метода Read , иногда может быть досадным препятствием. Ведь при нажатии клавиши <Enter> в поток ввода передается последовательность символов перевода каретки и перевода строки. Более того, эти символы остаются во входном буфере до тех пор, пока они не будут считаны. Следовательно, в некоторых приложениях приходится удалять эти символы (путем их считывания), прежде чем приступать к следующей операции ввода. Впрочем, для чтения введенных с клавиатуры символов без построчной буферизации, можно воспользоваться рассматриваемым далее методом ReadKey . Длд считывания строки символов служит приведенный ниже метод ReadLine .

static string ReadLine

Символы считываются методом ReadLine до тех пор, пока пользователь не нажмет клавишу <Enter>, а затем этот метод возвращает введенные символы в виде

объекта типа string. Кроме того, он сгенерирует исключение IOException при неудачном исходе операции ввода.

Ниже приведен пример программы, в которой демонстрируется чтение строки из потока 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 немедленно возвращает введенный с клавиатуры символ. И в этом случае пользователю уже не нужно нажимать дополнительно клавишу <Enter>. Таким образом, метод ReadKey позволяет считывать и обрабатывать ввод с клавиатуры в реальном масштабе времени.

Ниже приведены две формы объявления метода ReadKey .

static ConsoleKeylnfo ReadKey

static ConsoleKeylnfo ReadKey(bool intercept)

В первой форме данного метода ожидается нажатие клавиши. Когда оно происходит, метод возвращает введенный с клавиатуры символ и выводит его на экран. Во второй форме также ожидается нажатие клавиши, и затем возвращается введенный с клавиатуры символ. Но если значение параметра intercept равно true, то введенный символ не отображается. А если значение параметра intercept равно false, то введенный символ отображается.

Метод ReadKey возвращает информацию о нажатии клавиши в объекте типа ConsoleKeylnfo, который представляет собой структуру, состоящую из приведенных ниже свойств, доступных только для чтения.

char KeyChar ConsoleKey Key ConsoleModifiers Modifiers

Свойство KeyChar содержит эквивалент char введенного с клавиатуры символа, свойство Key — значение из перечисления ConsoleKey всех клавиш на клавиатуре, а свойство Modifiers — описание одной из модифицирующих клавиш (<Alt>, <Ctrl> или <Shift>), которые были нажаты, если это действительно имело место, при формировании ввода с клавиатуры. Эти модифицирующие клавиши представлены в перечислении ConsoleModifiers следующими значениями: Control, Shift и Alt. В свойстве Modifiers может присутствовать несколько значений нажатых модифицирующих клавиш.

Главное преимущество метода ReadKey заключается в том, что он предоставляет средства для организации ввода с клавиатуры в диалоговом режиме, поскольку этот ввод не буферизуется построчно. Для того чтобы продемонстрировать данный метод в действии, ниже приведен соответствующий пример программы.

// Считать символы, введенные с консоли, используя метод ReadKey.

using System;

class ReadKeys {

Поделиться с друзьями: