Console readkey c что это
Перейти к содержимому

Console readkey c что это

  • автор:

C# объясните пж как это работает. ConsoleKey keywoard = Console. ReadKey(). Key;

Изучаю только. До этого пользовался int x = x.Parse(Console. Readline()) . Тут все понятно было. Строка считывается с консоли, конвертируется в int и присваивается.

ConsoleKey keywoard = Console.Readkey().Key; 

ConsoleKey — получается тип данных enum , это константы там хранятся значения клавиатуры. Для доступа к ним создаётся keywoard(любое название)Пытаюсь разобратся( Console.Readkey().Key — получается значение считывается с консоли, а что .Key делает после скобок? Простите возможно за бред, сам запутался. Можете объяснить каждую ключевое слово и как вообще это строка работает. Благодарю

C# Для психов или извращенцев?

Данная статья не обучающая, и не является насмешка над языком.
Статья задумывалась для показа читателям какими способами можно вывести «Привет мир» на консоль в виде краткого обзора языка.

Скопировать в буфер

void main()

Классика

Начнем с классики жанра:
Скопировать в буфер

static void Main() < Console.Write("Hi All!"); // Классический способ вывести сообщение "Hi All" в консоль // Console.ReadKey(); // Закомментированный статический метод ReadKey() класса System.Console возвращающий объект System.ConsoleKeyInfo >

Разбираемся. Так как автор давно ушел в дары MS ‘ту, он не знает другого классического способа, способного работать в VS Visual C#. Здесь указывается, что авторы языка работали на MS , если Вы не знакомы с данным языком рекомендую почитать.

Класс Console является статичным. Это означает, что скомпилированная программа создаст единственный и неповторимый объект данного класса, с которым и будет взаимодействовать программа. И да все его поля, свойства и методы также статичны.

Console.Write() — Метод вывода сообщений на консоль, умеет выводить строки, различные числа, даты и объекты с определенным методом String ToString() . Первоначально метод ToString() определен классом System.Object и возвращает строку типа «<. >» в которой перечисляются характеристики, поля и их значения.
Также в качестве входных параметров можно указать форматирующую строку типа «A = » а дальше через запитую указать аргументы форматирования. Так это выглядит:

Скопировать в буфер

Console.Write(" !", "Hello", "World"); // Hello World!

Также существует метод WriteLine() , роль которого такая же, что и у Write() , но он дополнительно переводит курсор строки на новую строку. Оба эти метода ничего не возвращают (хотя. возвращают void , но это тоже самое что и не чего)

Console.ReadKey() — функция ожидания нажатия клавиши клавиатуры. Имеет схожую роль с system(«pause») из C++ , но вместо ожидании нажатия ENTER, она срабатывает на любой клавише. На system(«pause») больше похожи методы Console.Read() и Console.ReadLine() , но про них будет описание в другой статье. ReadKey() возвращает объект ConsoleKeyInfo , который можно использовать для проверки какая клавиша была нажата или сочетание клавиш (CTRL, ALT, SHIFT). Описание на MSDN (+пример).

Crazy Mode

Далее я приведу несколько извращенных способов вывода «Hello World!» на консоль используя возможности языка.

Скопировать в буфер

static void Main() < char[] CrazyWorld = new char[] < 'H','e','l','l','o',' ','W','o','r','l','d','!'>; Console.WriteLine(CrazyWorld); Console.ReadKey(); // Получаем Hello World! > static void Main() < char[] CrazyWorld = new char[] < 'H','e','l','l','o',' ','W','o','r','l','d','!'>; foreach(var i in CrazyWorld) Console.Write(i); Console.ReadKey(); // Все тот же Hello World! > static void Main() < char[] CrazyWorld = new char[] < 'H','e','l','l','o',' ','W','o','r','l','d','!'>; for(var i = 0; i < CrazyWorld.Length; i++) Console.Write(CrazyWorld[i]); Console.ReadKey(); >static void Main() < string CrazyWorld = "Hello STALKER"; Console.Write(CrazyWorld.Substring(0,6)); // Подстрока 6-той символ пробел for(var i = 6; i < CrazyWorld.Length; i++) Console.Write(".", CrazyWorld[i]); Console.ReadKey(); // Hello S.T.A.L.K.E.R. >

А теперь десерт!
Скопировать в буфер

namespace HelloWorld < /// /// Объекты будут приветствовать Вас /// class HelloYou < string YourName; public HelloYou(string name) < YourName = name; >public override string ToString() // Переопределяем реализацию Object.ToString() < return "Hello " + YourName + '!'; >> /// /// Код сей проги поведает каким извращенцем может быть C#-прогер /// class Program < static void Main() < HelloYou helloQuest = new HelloYou("Quest"); Console.WriteLine(helloQuest); Console.WriteLine(new HelloYou("Author")); Console.ReadKey(); // Hello Quest! // Hello Author! >> >

В примере выше автор создал класс HelloYou с конструктором принимающий имя того с кем нужно будет поздороваться экземпляру класса. В классе переопределяем метод ToString(), иначе в консоли мы увидим «HelloWorld.HelloYou». В главном методе создаем объект нашего класса как положено и кидаем его в консоль. Второй свежо испеченный объект также отправляется следом.

Статья подошла к концу (на большее не один из модераторов не согласится, все мы люди. ) А что не было изложено сейчас, будет изложено в следующих статьях.
Автор рад и благодарит Вас за Ваше внимание. Желает всего хорошего!

Консольный ввод-вывод

Консольный ввод-вывод осуществляется с помощью стандартных потоков, представленных свойствами Console.In , Console.Out и Console.Error . Примеры консольного ввода-вывода были представлены еще в главе ранее, поэтому он должен быть вам уже знаком. Как будет показано ниже, он обладает и рядом других дополнительных возможностей.

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

// Считать символ, введенный с клавиатуры. using System; class Kbln < static void Main() < char ch; Console.Write("Нажмите клавишу, а затем — : "); ch = (char)Console.Read(); // получить значение типа char Console.WriteLine("\nВы нажали клавишу: " + ch); > >

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

Нажмите клавишу, а затем — : 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 () теперь вызывается в классе 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 < 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'); > >

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

Введите несколько символов, а по окончании - . a Вы нажали клавишу: a b Вы нажали клавишу: b d Вы нажали клавишу: d A Вы нажали клавишу: A Нажата клавиша . B Вы нажали клавишу: B Нажата клавиша . C Вы нажали клавишу: C Нажата клавиша . • Вы нажали клавишу: • Нажата клавиша . 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("Деление на нуль приведет " + "к исключительной ситуации."); try < result = a / b; // сгенерировать исключение при попытке деления на нуль >catch (DivideByZeroException exc) < Console.Error.WriteLine(exc.Message); >> >

При выполнении этой программы получается следующий результат.

Деление на нуль приведет к исключительной ситуации. Попытка деления на нуль.

Начинающие программисты порой испытывают затруднения при использовании потока Console.Error . Перед ними невольно встает вопрос: если оба потока, Console.Out и Console.Error , по умолчанию выводят результат на консоль, то зачем нужны два разных потока вывода? Ответ на этот вопрос заключается в том, что стандартные потоки могут быть переадресованы на другие устройства. Так, поток Console.Error можно переадресовать в выходной файл на диске, а не на экран. Это, например, означает, что сообщения об ошибках могут быть направлены в файл журнала регистрации, не мешая выводу на консоль. И наоборот, если вывод на консоль переадресуется, а вывод сообщений об ошибках остается прежним, то на консоли появятся сообщения об ошибках, а не выводимые на нее данные. Мы еще вернемся к вопросу переадресации после рассмотрения файлового ввода-вывода.

Отличия методов Read, ReadLine, ReadKey

Прошу помощи, я новичок в программировании. Потренировался с ReadLine, понял, что считывается строка до Enter.
Read и ReadKey мне не понятен.

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Console Read(Line), ReadKey
Появилась такая проблема. Пишу программу в консоле. Первое меню отрабатывать должно по.

В чем отличие между методами Console.ReadLine() и Console.Read()
Всем добрый вечер! Скажите пожалуйста, в чем отличие между методами Console.ReadLine() и.

Если вместо Console.ReadLine написать Console.Read, начинает неправильно выполняться программа
Доброго времени суток, господа и дамы. Хотелось бы услышать объяснение от профессионалов, ибо.

Эксперт .NET

17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,086

Лучший ответ

Сообщение было отмечено MyFirstName как решение

Решение

Read считывает один символ и возвращает его порядковый номер в таблице Юникод или -1, если поток закончился.
ReadKey считывает один символ и возвращает информацию о нем: что за символ, что за клавиша на клавиатуре, какой модификатор был зажат и пр.

Регистрация: 11.05.2020
Сообщений: 68

ситуация проясняется. read — это код символа, а как мне получить -1? Я не понял, что значит поток закончился, можно пример?

var x = Console.ReadKey(); Console.Write(x);

Получил System.ConsoleKeyInfo — а это что такое? Что из него я могу узнать?

Эксперт .NET

17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,086

Лучший ответ

Сообщение было отмечено MyFirstName как решение

Решение

ЦитатаСообщение от MyFirstName Посмотреть сообщение

как мне получить -1?

Нажать Ctrl+Z, а потом Enter, например.
Или перенаправить на стандартный ввод файл или стандартный вывод другой программы.

ЦитатаСообщение от MyFirstName Посмотреть сообщение

что значит поток закончился

Весь стандартный ввод был считан и считывать больше нечего.

ЦитатаСообщение от MyFirstName Посмотреть сообщение

Получил System.ConsoleKeyInfo — а это что такое? Что из него я могу узнать?

Читайте документацию — там очень подробно все описано.
Если читать не любите, то изучайте методом тыка: поставьте точку и смотрите что предлагает студия в выпадающем списке.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Заменить Read на Readkey
var a,b,c,d,e,f:byte; s1,s2,s_otn:real; procedure geron(a,b,c:byte;var s1:real); var.

Отличия методов
Привет. Недавно начал изучать Java. Не пойму в чем отличия методов оболочек: decode(), parseInt().

Отличия методов класса от обычных функций
Что собой представляет метод в классах? Это такое же как и простая функция или что-то другое? Можно.

Какая разница между Console.ReadLine() и Сonsole.In.ReadLine()?
какая разница между Console.ReadLine() и Сonsole.In.ReadLine() ?

Какие основные отличия статических методов конкатенации строк и интерполяции строк?
Здравствуйте. Может кто сможет ответить на вопрос какие основные отличия статических методов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *