Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Чтение данных из потока ввода с консоли





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

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

using System;

class KbIn

{

static void Main()

{

char ch;

Console.WriteLine("Нажмите клавишу, а затем - <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. В качестве примера ниже приведен переделанный вариант предыдущего примера программы, в котором используется метод ReadLine(), определенный в классе 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 ConsoleKeyInfo ReadKey()

static ConsoleKeyInfo ReadKey(bool intercept)

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

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

char KeyChar;

ConsoleKey Key;

ConsoleModifiers Modifiers;

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

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

using System;

class ReadKeys

{

static void Main()

{

ConsoleKeyInfo keypress;

Console.WriteLine("Введите несколько символов, а по окончании - <Q>.");

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("Нажата клавиша <Contros>.");

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>.

Date: 2015-09-02; view: 607; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию