C#. Урок 3. Консольный ввод\вывод

Автор: | 28.10.2020

Backend-разработка и создание утилит командной строки невозможно без консольного ввода\вывода. В рамках данной статьи будут рассмотрены методы класса Console для чтения и записи информации в консоль.

Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.

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

Все приложения условно можно разделить на две группы: консольные и с графическим интерфейсом пользователя. Ко второй группе относится большая часть приложений, с которыми работают пользователи в операционной системе Windows, на смартфонах и в вебе. Под консольными будем понимать приложения, которые запускаются через терминал (командную строку), их взаимодействие с пользователем происходит в текстовом режиме. Практически все приложения, которые запускаются на стороне сервера можно отнести к этой группе. Для организации ввода\вывода информации при работе с консолью в C# используется класс Console.

Класс Console. Вывод данных в консоль

Класс Console содержит методы для работы с консольным вводом\выводом, управлением потоком с ошибками и окном консоли. Начнем с вывода информации в консоль, для решения этой задачи класс Console предоставляет два метода: Write и WriteLine.

Для знакомства с методами класса Console создайте в удобном для вас каталоге проект с именем CSharpLesson3:

> dotnet new console -o CSharpLesson3

Метод Write

Метод Write – направляет в стандартный выходной поток текстовое представление переданного в него объекта. Дополнительно, предоставляет возможность задать форматирование.

Откройте файл Program.cs в созданном ранее проекте и добавьте в метод Main следующие строки, демонстрирующие работу с методом Write:

// Примеры работы с методом Write без форматирования
Console.Write("Текущая дата: ");
Console.Write(DateTime.Now);
Console.Write("\n");
Console.Write($"Текущая дата: {DateTime.Now}\n");
          
// Примеры работы с методом Write с использованием форматирования
Console.Write("Текущая дата: {0}\n", DateTime.Now);
Console.Write("Число: {0:E}\n", 123.456789);

Более подробно про форматирование будет написано в уроке, посвященном работе со строками.

Сохраните документ, откройте консоль, перейдите в каталог с проектом и выполните команду:

> dotnet run

Результат работы программы будет выглядеть примерно следующим образом:

Текущая дата: 16.10.2020 11:48:28
Текущая дата: 16.10.2020 11:48:28
Текущая дата: 16.10.2020 11:48:28
Текущая дата: 1,234568E+002

Обратите внимание на первые три вызова метода Write, если не поставить символ перевода строки, то данные будут выдаваться в одну строку друг за другом, это не всегда удобно. Если требуется, чтобы вывод каждый раз осуществлялся с новой строки, то воспользуйтесь методом WriteLine.

Метод WriteLine

Метод WriteLine записывает указанные данные в выходной поток и добавляет символ перевода строки. Добавьте в программу следующие строки:

Console.WriteLine("Текущая дата: ");
Console.WriteLine(DateTime.Now);

Теперь надпись “Текущая дата:” и дата со временем будут выведены в разных строках.
WriteLine (также как Write) может принимать не только строковые значения, но и переменные разных типов:

DateTime nowDate = DateTime.Now;
string someText = "Сегодня";
int number = 924;
Console.WriteLine(nowDate);
Console.WriteLine(someText);
Console.WriteLine(number);

Удобным и наглядным способом вывода значений переменных в консоль с дополнительным текстовым пояснением является использование строковой интерполяции:

Console.WriteLine($"{someText} {nowDate}. Число: {number}");

Запустите проект и в консоли увидите результат выполнения программы:

Сегодня 26.08.2020 11:53:44. Число: 924

Прием интерполяции позволяет внутри строки, используя фигурные скобки, указывать имена переменных, которые будут заменены значениями. Перед такой строкой ставится знак $.
Методы WriteLine и Write позволяют использовать форматирование:

Console.WriteLine("{1}:{0:yyyy-MM-dd}, Число: {2}", nowDate, someText, number);

В этом случае методу передается ряд параметров, первый – это строка, в которой, в фигурных скобках, указывается порядок подстановки значений переменных, далее, через запятую, перечисляются переменные, значения которых нужно подставить, здесь важен порядок: нумерация начинается с 0.

Класс Console. Чтение данных из консоли

В классе Console, помимо рассмотренных выше методов вывода в консоль, присутствуют методы для считывания вводимых данных из консоли.

Метод Read

Метод Read возвращает числовой код последнего введенного символа во входном потоке, если символ введен не был, то будет возвращен код -1. Для завершения работы метода, после ввода символа необходимо нажать клавишу “Enter”. Рассмотрим работу с методом Read на примере:

Console.WriteLine("Нажмите любую клавишу, а затем Enter");
int key1 = Console.Read();
Console.WriteLine($"Код нажатой клавиши: {key1}");
Console.WriteLine("Символьное представление: " + Convert.ToChar(key1));

Если после надписи “Нажмите любую клавишу, а затем Enter” будет введено более одного символа, то Read вернет только первый.

Для представления кода в виде символа необходимо переменную key1 привести к типу Char, для этого можно воспользоваться методом Convert.ToChar().

Метод ReadLine

Метод ReadLine возвращает введенную строку символов до нажатия клавиши “Enter”. Добавим несколько строк в файл с исходным кодом, для демонстрации работы с методом ReadLine:

Console.WriteLine("Введите ваше имя, а затем нажмите Enter");
string name = Console.ReadLine();
Console.WriteLine($"Привет, {name}!");

Если необходимо получить с консоли численные данные, то следует воспользоваться методами из класса Convert для приведения типа String к соответствующему числовому типу:

Console.WriteLine("Сколько вам лет?");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Ваш рост в см?");
int height = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Привет {0}, вам уже {1} полных лет и ваш рост {2} см", name, age, height);

Метод ReadKey

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

Console.WriteLine("Нажмите любую клавишу:");
var key2 = Console.ReadKey();
Console.WriteLine(key2.Key);
Console.WriteLine(key2.KeyChar);

Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.

Поделиться
Share on VK
VK
Tweet about this on Twitter
Twitter
Share on Facebook
Facebook

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

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