Хотите получать новые статьи блога
прямо себе на почту?
Укажите свой e-mail:


WorldSkills Russia
Яндекс.Метрика Интернет-издание Профобразование

Организация ввода/вывода данных с помощью класса Console

0

Лекция №4

Тема: Организация ввода/вывода данных с помощью класса Console.

План:

  1. Понятие «консольное» приложение.
  2. Организация ввода/вывода данных с помощью класса Console.
  3. Форматирование:
    • с помощью управляющих последовательностей
    • форматирование чисел

1. Понятие «консольное» приложение.

Понятие «консоль» пришло к нам из времён, когда были популярны большие компьютеры, их называли менфреймами. Компания размещала в каком-нибудь помещении один гигантский компьютер, а на рабочих местах служащих устанавливались только клавиатура и простенький монитор, называвшийся консолью. Клавиатура и монитор подключались к тому самому «монстру», спрятанному от посторонних глаз в отдельной комнате. Такие монстры не умели отображать графику — только текст. Информация передавалась в мейнфрейм при помощи клавиатуры — основного устройства ввода, а консоль — основное устройство вывода — позволяла компьютеру представлять информацию пользователю.

Сегодня мониторы большинства компьютеров имеют гораздо более современные возможности и способны отображать не только текст, но и , например, фотографии. Однако, при выполнении многих задач никаких графических изысков не требуется. Например, программа, получающая какие-либо данные с сервера в Интернете и сохраняющая их в файл на вашем компьютере, должна уметь выводить только два сообщения: «Идёт получение данных…» и «Готово!». Зачем тратить время на разработку затейливого пользовательского интерфейса, который занимает много памяти? Именно по этой причине в библиотеку .NET включен класс для быстрого написания консольных приложений. Не стоит относиться снисходительно к консольным приложениям и считать их слишком примитивными. Опытные программисты предпочитают не тратить время на интерфейсные ухищрения и работают в основном с консольными приложениями.

Конечно, если вашей программой будет пользоваться кто-то ещё, то вы, вероятно, окажите ему большую услугу, сделав интерфейс чуть более дружественным, чем в стандартном консольном приложении.

Консольные приложения предельно просты, что позволяет сосредоточить внимание на обсуждаемых возможностях языка.

2. Организация ввода/вывода данных с помощью класса Console.

Программа при вводе данных и выводе результатов взаимодействует с внешними устройствами. Совокупность стандартных устройств ввода (клавиатуры) и вывода (экран) называется консолью.

В языке C# нет операторов ввода и вывода. Вместо них для обмена данными с внешними устройствами используются специальные объекты. В частности, для работы с консолью используется стандартный класс Console, определённый в пространстве имён System.

  1. Метод WriteLine() выводит сообщение в специальное консольное окно на экране дисплея и переводит курсор окна на начало следующей строки.
  2. Метод Write() также выводит текст, но оставляет курсор сразу за последним выведенным символом.
  3. Метод ReadLine() поддерживает ввод текстовой строки с клавиатуры компьютера и осуществляет эхо-повтор введённого в консольном окне, т.е. считывает строку символов, введённую с клавиатуры (или иного устройства).
Этот метод представляет собой функцию, однако его можно вызвать и без использования возвращаемого им результата — в этом случае дальнейшее выполнение программы приостанавливается до тех пор, пока пользователь не нажмёт клавишу Enter.

Листинг 1. Пример консольного ввода/вывода

[c-sharp]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("Введите ваше имя: ");
string S = Console.ReadLine();
if (S != "")
Console.WriteLine("Привет, {0}!", S);
else
Console.WriteLine("Привет, незнакомец!");
Console.Write("Сколько тебе лет? ");
S = Console.ReadLine();
Console.WriteLine("Твой возраст {0} лет.\n", S);
Console.WriteLine("Нажмите ENTER для завершения программы.");
Console.ReadLine();
}
}
}
[/c-sharp]

Особенностью метода ReadLine() является то, что в качестве результата он возвращает строку.

Листинг 2. Особенность метода ReadLine()

[c-sharp]
static void Main(string[] args)
{
string s = Console.ReadLine();
Console.WriteLine(s);
Console.ReadLine();
}
[/c-sharp]

Для того, чтобы получить числовое значение, необходимо воспользоваться преобразованием данных.

Листинг 3. Преобразование данных (строки в число)

[c-sharp]
static void Main(string[] args)
{
string s = Console.ReadLine();
int x = int.Parse(s); //преобразование строки в число
Console.WriteLine(x);
Console.ReadLine();
}
[/c-sharp]

Или сокращённый вариант:

Листинг 4. Преобразование данных (введённой строки в число) сокращённый вариант

[c-sharp]
static void Main(string[] args)
{
//преобразование введённой строки в число
int x = int.Parse(Console.ReadLine());
Console.WriteLine(x);
Console.ReadLine();
}
[/c-sharp]

Для преобразования строкового представления целого числа в тип int мы используем метод int.Parse(), который реализован для всех числовых типов данных. Таким образом, если нам потребуется преобразовать строковое представление в вещественное, мы можем воспользоваться методом float.Parse() или double.Parse(). В случае, если соответствующее преобразование выполнить невозможно, то выполнение программы прерывается и генерируется исключение System.FormatExeption (входная строка имела неверный формат).

3. Форматирование

Существует несколько способов применения метода WriteLine():

  1. [c-sharp]Console.WriteLine(x);[/c-sharp]

    на экран выводится значение идентификатора x

  2. [c-sharp]onsole.WriteLine("x="+x+"y="+y);[/c-sharp]

    на экран выводится строка, образованная последовательным слиянием строки «x=», значения x, строки «y=» и значением y

  3. [c-sharp]Console.WriteLine("x={0} y={1}", x, y);[/c-sharp]

    на экран выводится строка, формат которой задан первым аргумент метода, при этом вместо параметра {0} выводится значение x, а вместо {1} значение y

В языке C# имеется система специальных символов, которые вставляются в текстовую строку наравне с обычными символами сообщения, но при выводе осуществляется нужное форматирование сообщения.

Под форматированием понимается придание строки желаемого вида.

а) форматирование с помощью управляющих последовательностей

Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или Escape-последовательностями.

Таблица 1. Управляющие последовательности в языке C#

Последовательность Интерпретация
\a Звуковой сигнал
\b Возврат на шаг назад
\f Перевод страницы
\n Перевод строки
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\\ Обратная косая черта
\’ Апостроф
Кавычки

Последовательности символов, начинающиеся с обратной косой черты, называют управляющими, или Escape-последовательностями.

Листинг 5. Форматирование с помощью управляющих последовательностей

[c-sharp]
static void Main(string[] args)
{
Console.WriteLine("Ура!\nСегодня\"ООП\"!!!");
Console.ReadLine();
}
[/c-sharp]

Организация ввода/вывода данных с помощью класса Console

б) форматирование чисел

Вещественное число 9.99 есть всего лишь число. Но если мы знаем, что на самом деле оно отражает денежную сумму, мы можем отформатировать строку так, что при выводе будет напечатано 9,99 р. Вот как этого можно достичь:

Листинг 6. Форматирование чисел

[c-sharp]
static void Main(string[] args)
{
Console.WriteLine("На счёт поступила сумма {0:C}",9.99);
Console.ReadLine();
}
[/c-sharp]

Организация ввода/вывода данных с помощью класса Console

В кавычках, ограничивающих строковое выражение, в нашем случае выставлены форматирующие символы {0:С}, которые определяют заполнитель, т.е. место, которое при выводе будет заменяться заменителем в соответствии с требуемым форматом.

Заменитель указывается после запятой, в нашем случае 9.99.

Таблица 2. Формат заполнителя

ЗАПОЛНИТЕЛЬ

{n:

m}

В заполнителе первым символом (n) должна быть цифра 0, 1, 2, 3 и т.д. Эта цифра указывает, какой по счёту заменитель должен выводиться вместо данного заполнителя. В нашем примере используется единственный заменитель, поэтому в заменителе указана цифра 0. На практике количество заменителей может быть любым. Вслед за цифрой в заполнителе через двоеточия может указываться буква, определяющая требуемый формат преобразования. В нашем примере буква c задаёт денежный формат, поэтому будет выведена такая строка:

На счёт поступила сумма 9,99 р.
Заметьте, что символы денежной единицы и разделитель целой и дробной частей вещественного числа определяется локализацией Windows. Я использую русскоязычную версию этой ОС. В англоязычной версии была бы напечатана такая строка:

На счёт поступила сумма $9,99.

В качестве спецификаторов могут использоваться следующие значения:

Таблица 3. Спецификаторы и их значения

Спецификатор Влияние на формат
C или c Используется для вывода числа в денежном формате.
E или e Выводит вещественное число в экспоненциальном формате.
F или f Выводит вещественное число с фиксированной точкой. Сразу за символом можно указать требуемое количество знаков после точки (запятой).
G или g Использует формат F или E в зависимости от числа.
N или n Представляет число с разделителями тысяч. Сразу за символом можно указать требуемое количество знаков после точки (запятой).
X или x Выводит целое число в шестнадцатеричном формате. Если символ формата прописной, все буквы шестнадцатеричного представления также будут прописными.
В фигурных скобках можно и не задавать требуемый формат представления. В этом случае опускается после номера заполнителя через запятую указывать целое число, определяющее количество позиций, которые должно занимать выводимое число.

Листинг 7. Использование спецификаторов при форматирование чисел

[c-sharp]
static void Main(string[] args)
{
double x = Math.E;
Console.WriteLine("E={0,20}", x);
Console.WriteLine("E={0,10}", x);
Console.ReadLine();
}
[/c-sharp]
Если это число меньше необходимого для вывода количества позиций, число игнорируется, в противном случае вывод сдвигается вправо.

Организация ввода/вывода данных с помощью класса Console

Управление размещением вещественных чисел:

{n:##.###}

  • n — определяет номер идентификатора из списка аргументов;
  • ##.### — определяет формат вывода вещественного числа.

В данном случае под целую часть отводится две позиции, под дробь три.

Если выделенных позиций для размещения целой части значения идентификатора окажется недостаточно, то автоматически добавится необходимое количество позиций.

Листинг 8. Управление размещением вещественных чисел

[c-sharp]
static void Main(string[] args)
{
double x = Math.E;
Console.WriteLine("E={0:##.###}", x);
Console.WriteLine("E={0:.####}", x);
Console.ReadLine();
}
[/c-sharp]

Организация ввода/вывода данных с помощью класса Console