Консольный ввод-вывод
Консольньгй ввод-вывод осуществляется с помощью стандартных потоков, представленных свойствами Console. In, Console. Out и Console. Error. Примеры консольного ввода-вывода были представлены еще в главе 2, поэтому он должен быть вам уже знаком. Как будет показано ниже, он обладает и рядом других дополнительных возможностей.
Но прежде следует еще раз подчеркнуть, что большинство реальных приложений C# ориентированы не на консольный ввод-вывод в текстовом виде, а на графический оконный интерфейс для взаимодействия с пользователем, или же они представляют собой программный код, используемый на стороне сервера. Поэтому часть системы ввода-вывода, связанная с консолью, не находит широкого практического применения. И хотя программы, ориентированные на текстовый ввод-вывод, отлично подходят в качестве учебных примеров, коротких сервйсньгх программ или определенного рода программных компонентов, для большинства реальных приложений они не годятся.
Чтение данных из потока ввода с консоли
Поток Console. In является экземпляром объекта класса TextReader, и поэтому для доступа к нему могут быть использованы методы и свойства, определенные в классе TextReader. Но для этой цели чаще все же используются методы, предоставляемые классом Console, в котором автоматически организуется чтение данных из потока Console. In. В классе Console определены три метода ввода. Два первых метода, Read ( ) и ReadLine (), были доступны еще в версии .NET Framework 1.0. А третий метод, ReadKey (), был добавлен в версию 2.0 этой среды.
Для чтения одного символа служит приведенный ниже метод Read ().
static int Read()
Метод Read () возвращает очередной символ, считанный с консоли. Он ожидает до тех пор, пока пользователь не нажмет клавишу, а затем возвращает результат. Возвращаемый символ относится к типу int и поэтому должен быть приведен к типу char. Если при вводе возникает ошибка, то метод Read () возвращает значение -1. Этот метод сгенерирует исключение IOException при неудачном исходе операции ввода. Ввод с консоли с помощью метода Read () буферизуется построчно, поэтому пользователь должен нажать клавишу , прежде чем программа получит любой символ, введенный с консоли.
Ниже приведен пример программы, в которой метод Read () используется для считывания символа, введенного с клавиатуры.
// Считать символ, введенный с клавиатуры.
using System;
class КЫп {
static void Main() { char ch;
Console.Write("Нажмите клавишу, а затем — : ");
ch = (char) Console.Read(); // получить значение типа char Console.WriteLine("Вы нажали клавишу: " + ch) ;
}
}
Вот, например, к какому результату может привести выполнение этой программы.
Нажмите клавишу, а затем — : t Вы нажали клавишу: t
Необходимость буферизировать построчно ввод, осуществля^емый с консоли посредством метода Read () , иногда может быть досадным препятствием. Ведь при нажатии клавиши в поток ввода передается последовательность символов перевода каретки и перевода строки. Более того, эти символы остаются во входном буфере до тех пор, пока они не будут считаны. Следовательно, в некоторых приложениях приходится удалять эти символы (путем их считывания), прежде чем приступать к следующей операции ввода. Впрочем, для чтения введенных с клавиатуры символов без построчной буферизации, можно воспользоваться рассматриваемым далее методом ReadKey () . Длд считывания строки символов служит приведенный ниже метод ReadLine ().
static string ReadLine()
Символы считываются методом ReadLine () до тех пор, пока пользователь не нажмет клавишу , а затем этот метод возвращает введенные символы в виде
объекта типа string. Кроме того, он сгенерирует исключение IOException при неудачном исходе операции ввода.
Ниже приведен пример программы, в которой демонстрируется чтение строки из потока Console . In с помощью метода ReadLine ().
// Ввод с консоли с помощью метода ReadLine().
Читать дальше