Метод ReadKey()возвращает информацию о нажатии клавиши в объекте типа ConsoleKeylnfo, который представляет собой структуру, состоящую из приведенных ниже свойств, доступных только для чтения.
char KeyChar
ConsoleKey Key
ConsoleModifiers Modifiers
Свойство KeyCharсодержит эквивалент charвведенного с клавиатуры символа, свойство Key— значение из перечисления ConsoleKeyвсех клавиш на клавиатуре, а свойство Modifiers— описание одной из модифицирующих клавиш (, или ), которые были нажаты, если это действительно имело место, при формировании ввода с клавиатуры. Эти модифицирующие клавиши представлены в перечислении ConsoleModifiersследующими значениями: Control, Shiftи Alt. В свойстве Modifiersможет присутствовать несколько значений нажатых модифицирующих клавиш.
Главное преимущество метода ReadKey()заключается в том, что он предоставляет средства для организации ввода с клавиатуры в диалоговом режиме, поскольку этот ввод не буферизуется построчно. Для того чтобы продемонстрировать данный метод в действии, ниже приведен соответствующий пример программы.
// Считать символы, введенные с консоли, используя метод ReadKey().
using System;
class ReadKeys {
static void Main() {
ConsoleKeyInfo keypress;
Console.WriteLine("Введите несколько символов, " +
"а по окончании - .");
do {
keypress = Console.ReadKey(); // считать данные о нажатых клавишах
Console.WriteLine(" Вы нажали клавишу: " + keypress.KeyChar);
// Проверить нажатие модифицирующих клавиш.
if((ConsoleModifiers.Alt & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша .");
if((ConsoleModifiers.Control & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша .");
if((ConsoleModifiers.Shift & keypress.Modifiers) != 0)
Console.WriteLine("Нажата клавиша .");
} while(keypress.KeyChar != 'Q');
}
}
Вот, например, к какому результату может привести выполнение этой программы.
Введите несколько символов, а по окончании - .
а Вы нажали клавишу: а
b Вы нажали клавишу: b
d Вы нажали клавишу: d
А Вы нажали клавишу: А
Нажата клавиша .
В Вы нажали клавишу: В
Нажата клавиша .
С Вы нажали клавишу: С
Нажата клавиша .
• Вы нажали клавишу: •
Нажата клавиша .
Q Вы нажали клавишу: Q
Нажата клавиша .
Как следует из приведенного выше результата, всякий раз, когда нажимается клавиша, метод ReadKey()немедленно возвращает введенный с клавиатуры символ. Этим он отличается от упоминавшегося ранее метода Read(), в котором ввод выполняется с построчной буферизацией. Поэтому если требуется добиться в программе реакции на ввод с клавиатуры, то рекомендуется выбрать метод ReadKey().
Запись данных в поток вывода на консоль
Потоки Console.Outи Console.Errorявляются объектами типа TextWriter. Вывод на консоль проще всего осуществить с помощью методов Write()и WriteLine(), с которыми вы уже знакомы. Существуют варианты этих методов для вывода данных каждого из встроенных типов. В классе Console определяются его собственные варианты метода Write()и WriteLine(), и поэтому они могут вызываться непосредственно для класса Console, как это было уже не раз показано на страницах данной книги. Но при желании эти и другие методы могут быть вызваны и для класса TextWriter, который является базовым для потоков Console.Outи Console.Error.
Ниже приведен пример программы, в котором демонстрируется вывод в потоки Console.Outи Console.Error. По умолчанию данные в обоих случаях выводятся на консоль.
// Организовать вывод в потоки Console.Out и Console.Error.
using System;
class ErrOut {
static void Main() {
int a=10, b=0;
int result;
Console.Out.WriteLine("Деление на нуль приведет " +
"к исключительной ситуации.");
Читать дальше