do {
keypress = Console.ReadKey(); // считать данные о нажатых клавишах Console.WriteLine(' Вы нажали клавишу: ' + keypress.KeyChar);
// Проверить нажатие модифицирующих клавиш.
if((ConsoleModifiers.Alt & keypress.Modifiers) != 0)
Console.WriteLine('Нажата клавиша <Alt>.'); if((ConsoleModifiers.Control & keypress.Modifiers) != 0)
Console.WriteLine('Нажата клавиша <Control>.'); if((ConsoleModifiers.Shift & keypress.Modifiers) != 0)
Console.WriteLine('Нажата клавиша <Shift>.');
} while(keypress.KeyChar != ' Q');
}
}
Вот, например, к какому результату может привести выполнение этой программы.
Введите несколько символов, а по окончании - <Q>.
а Вы нажали клавишу: а
b Вы нажали клавишу: b
d Вы нажали клавишу: d
А Вы нажали клавишу: А
Нажата клавиша <Shift>.
В Вы нажали клавишу: В
Нажата клавиша <Shift>.
С Вы нажали клавишу: С
Нажата клавиша <Shift>.
• Вы нажали клавишу: •
Нажата клавиша <Control>.
Q Вы нажали клавишу: Q
Нажата клавиша <Shift>.
/
Как следует из приведенного выше результата, всякий раз, когда нажимается клавиша, метод ReadKey () немедленно возвращает введенный с клавиатуры символ.*Этим он отличается от упоминавшегося ранее метода Read (), в котором ввод выполняется с построчной буферизацией. Поэтому если требуется добиться в программе реакции на ввод с клавиатуры, то рекомендуется выбрать метод ReadKey ().
Запись данных в поток вывода на консоль
Потоки Console . Out и Console .Error являются объектами типа TextWriter. Вывод на консоль проще всего осуществить с помощью методов Write () и WriteLine (), с которыми вы уже знакомы. Существуют варианты этих методов для вывода данных каждого из встроенных типов. В классе Console определяются его собственные варианты метода Write() nWriteLine(),n поэтому они могут вызываться непосредственно для класса 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('Деление на нуль приведет ' +
'к исключительной ситуации.');
try {
result = а / b; // сгенерировать исключение при попытке деления на нуль } catch (DivideByZeroException exc) {
