Serge's portal: .NET developing

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Serge's portal: .NET developing » Console » Ввод\вывод


Ввод\вывод

Сообщений 1 страница 6 из 6

1

Ввод\вывод информации в консольном приложении

2

Ввод/Вывод информации в консольном приложении.

Введение.
Прежде, чем заняться непосредственно вводом/выводом, несколько слов о «Начале проекта» и «наипростейшей программе».
После запуска Visual Studio (дальше VS) выбираем -File\New\Project… В появившемся окне, слева, выбираем - Visual C#\Windows, после - необходимое нам приложение, а именно «Console Application». Теперь нам осталось только назвать будущее приложение (пусть будет Manual) и прописать путь к месту, где будут храниться файлы. Нажимаем «Ок» и VS генерирует базовый проект. Из того, что делает VS, нам нужно знать две вещи - это подключению к проекту библиотеки (System)  и «состав наипростейшей программы». Подключенные библиотеки можно посмотреть в папке «References» (подключаются библиотеки с помощью функции «Add References» - через выпадающее или главное меню).
Программа на С# состоит из нескольких вещей:
1 – Класс, который содержит необходимый метод Main (без него программа не запуститься) – назовем его MainClass (название может быть любым, VS его называет Program)
2 – Пространство имен (namespace), куда будет входить наш класс MainClass. Для «наипростейшей программы» это не обязательно, но является довольно удобным инструментом для структурирования программы. (Назовем это пространство имен Manual, по умолчанию VS называет это пространство имен так же как называется проект)
3 – Подключение уже существующих пространств имен с уже написанными и отлаженными классами. Собственно все можно написать самому, но зачем тратить время на то, что уже есть и работает? Для консольного приложения нам понадобиться System. (VS добавляет это пространство имен в числе прочих)

Ниже представлена простейшая программа с пояснениями:

// Подключаем пространство имен System:
using System;

// Задаём пространство имён нашей программы:
namespace Manual
{
    // Задаём имя класса, в котором находится метод Main:
    class MainClass
    {
        // Это главный метод. С него начинается выполнение программы:
        static void Main(string[] args)
        {
        }
    }
}

Совет:
При работе в VS, для запуска консольных приложений, рекомендуется использовать комбинацию Ctrl+F5 – перед закрытием, окно запрашивает «нажатие клавиши». Позволяет посмотреть результат работы программы.

Отредактировано Bulax (14-05-2007 23:03:17)

3

Глава 1.

За работу с консолью отвечает соответствующий класс Console, который является членом пространства имен System. Соответственно для обращения к данному классу (как и любому другому) происходит так:
«Класс».«Метод»();
или в нашем случае Console.WriteLine("Hello World!");

Комментарий:  Бывают ситуации, когда в программе используют два класса с одним именем, но принадлежащие разным пространствам имен. В этом случае, перед классом поставьте Пространство имен (например, System.Console….)

В таблице приведены все методы и свойства, которые есть в классе Console (с описанием на английском или с моим вольным описанием/переводом, оригинал можно посмотреть в MSDN)

Открытые свойства
BackgroundColor - Возвращает или устанавливает цвет фона консоли.
BufferHeight - Gets or sets the height of the buffer area.
BufferWidth - Gets or sets the width of the buffer area.
CapsLock- Gets a value indicating whether the CAPS LOCK keyboard toggle is turned on or turned off.
CursorLeft - Gets or sets the column position of the cursor within the buffer area.
CursorSize - Gets or sets the height of the cursor within a character cell.
CursorTop - Gets or sets the row position of the cursor within the buffer area.
CursorVisible - Gets or sets a value indicating whether the cursor is visible.
Error - Gets the standard error output stream.
ForegroundColor - Возвращает или устанавливает цвет текста в консоли.
In - Gets the standard input stream.
InputEncoding - Gets or sets the encoding the console uses to read input.
KeyAvailable - Gets a value indicating whether a key press is available in the input stream.
LargestWindowHeight - Gets the largest possible number of console window rows, based on the current font and screen resolution.
LargestWindowWidth - Gets the largest possible number of console window columns, based on the current font and screen resolution.
NumberLock - Gets a value indicating whether the NUM LOCK keyboard toggle is turned on or turned off.
Out - Gets the standard output stream.
OutputEncoding - Gets or sets the encoding the console uses to write output.
Title - Возвращает или устанавливает заголовок консоли.
TreatControlCAsInput - Gets or sets a value indicating whether the combination of the Control modifier key and C console key (CTRL+C) is treated as ordinary input or as an interruption that is handled by the operating system.
WindowHeight - Возвращает или устанавливает высоту окна консоли.
WindowLeft - Gets or sets the leftmost position of the console window area relative to the screen buffer.
WindowTop - Gets or sets the top position of the console window area relative to the screen buffer.
WindowWidth - Возвращает или устанавливает ширину окна консоли.
Открытые Методы
Beep - Overloaded. Plays the sound of a beep through the console speaker.
Clear - Clears the console buffer and corresponding console window of display information.
Equals - Overloaded. Determines whether two Object instances are equal. (Inherited from Object.)
GetHashCode Serves as a hash function for a particular type. GetHashCode is suitable for use in hashing algorithms and data structures like a hash table. (Inherited from Object.)
GetType - Gets the Type of the current instance. (Inherited from Object.)
MoveBufferArea - Overloaded. Copies a specified source area of the screen buffer to a specified destination area.
OpenStandardError - Overloaded. Acquires the standard error stream.
OpenStandardInput - Overloaded. Acquires the standard input stream.
OpenStandardOutput - Overloaded. Acquires the standard output stream.
Read - Reads the next character from the standard input stream.
ReadKey - Overloaded. Obtains the next character or function key pressed by the user.
ReadLine - Reads the next line of characters from the standard input stream.
ReferenceEquals - Determines whether the specified Object instances are the same instance. (Inherited from Object.)
ResetColor Присвоение св-вам BackgroundColor и ForegroundColor дефолтных значений.
SetBufferSize - Sets the height and width of the screen buffer area to the specified values.
SetCursorPosition - Sets the position of the cursor.
SetError - Sets the Error property to the specified TextWriter object.
SetIn - Sets the In property to the specified TextReader object.
SetOut - Sets the Out property to the specified TextWriter object.
SetWindowPosition - Sets the position of the console window relative to the screen buffer.
SetWindowSize - Устанавливает размеры окна консоли.
ToString - Returns a String that represents the current Object. (Inherited from Object.)
Write - Вывод информации (символьной) на экран. Перегружен.
WriteLine - Построчный вывод информации (символьной) на экран. Перегружен.

Дальше мы будем рассматривать некоторые методы и свойства на примере простых программ.

Комментарий: Большинство примеров взято из MSDN, с моими комментариями.

Отредактировано Bulax (14-05-2007 23:08:09)

4

Методы Write и WriteLine

Это основные методы, отвечающие за вывод информации в консольных приложениях. Между собой они отличаются «окончанием», то есть WriteLine, после вывода информации, переводит курсор на новую строку (Write этого не делает).
Оба метода перегружены, что позволяет работать практически с любыми данными.

В примере приведены некоторые варианты использования данных методов.

Комментарий: при выводе информации можно использовать «Управляющие последовательности». Некоторые из них:
\’  - вставляет одинарную кавычку в строку
\”  - вставляет двойную кавычку в строку
\b  - «вернуться на одну позицию» (Backspace)
\n  - вставить новую строку (New Line)
\r  - вставить возврат каретки (carriage Return)
\t  - вставить горизонтальный символ табуляции
\v – вставить вертикальный символ табуляции

// Подключаем пространство имен System: 
using System;

// Задаём пространство имён нашей программы:
namespace Manual
{
    // Задаём имя класса, в котором находится метод Main:
    class MainClass
    {
        // Это главный метод. С него начинается выполнение программы:
        static void Main(string[] args)
        {
            // Выводим информацию с помощью Write, обратите внимание, что все выводиться в одной строчку
            Console.Write("11111");
            Console.Write("22222");
            Console.Write("33333");
            // добавляем две пустые строки, для разделения :)
            Console.Write(\n);
            Console.Write(\n);

            // Выводим информацию с помощью WriteLine, обратите внимание, что каждое сообщение на новой строке
            Console.WriteLine("111111");
            Console.WriteLine("222222");
            Console.WriteLine("333333");
            Console.WriteLine();

            // вводим переменную int и выводим ее значение на экран, если надо вывести несколько переменных сразу, то внутрь кавычек добавьте {1}, {2} и тд (см в конце программы)
            int c = 10;
            Console.WriteLine("Выведем число: {0}", c);
            Console.WriteLine();

            // вводим переменную double  и выводим ее значение на эран в двух вариантах. Для вывода процентов использует служебный символ ":р", "2" после "р" означает кол-во знаков после запятой (для подробностей см. "создание строк")
            double dbl = 1.23;
            Console.WriteLine("Выведем число {0} в процентах: {0:p2}", dbl);
            Console.WriteLine();

            // Выводим сообщений с использованием "управляющих последовательностей" " \" ", "\n","\r"
            Console.WriteLine("Использование символа \"Новая строка\" и \"Возврат каретки\"");
            Console.WriteLine("1234567\n890");
            Console.WriteLine("1234567\r890");
            Console.WriteLine();
           
            // Вводим переменную bool и выводим ее значение на экран
            bool bo = true;
            Console.WriteLine("Выведем булевую переменную: {0}", bo);
            Console.WriteLine();

            // Вводим несколько переменных и комплексно выводим на экран. Так же используются "управляющие последовательностей" "\t" и ":c" (денежный знак, который стоит у вас в системе по умолчанию).
            string name = "Вася";
            int age = 10;
            double money = 15.5;
            Console.WriteLine("Этого мальчика зовут {0}, ему {1} лет. Папа дал ему \t{2, 0:c} на мороженное.", name, age, money);

        }
    }
}

Отредактировано Bulax (14-05-2007 23:33:23)

5

Свойства  BackgroundColor и ForegroundColor + метод ResetColor + ConsoleColor (список возможных цветов)

BackgroundColor - Возвращает или устанавливает цвет фона консоли.
ForegroundColor - Возвращает или устанавливает цвет текста в консоли.
ResetColor - Присвоение св-вам BackgroundColor и ForegroundColor дефолтных значений.

// Пример для св-в BackgroundColor и ForegroundColor + ConsoleColor
// Подключаем пространство имен System:

using System;

// Задаём имя класса, в котором находится метод Main:
class MainClass
{
    // Это главный метод. С него начинается выполнение программы:
    public static void Main()
    {
        // Создание массива colorNames (string) со всеми возможными цветами из ConsoleColor (см. Enum):
        String[] colorNames = ConsoleColor.GetNames(typeof(ConsoleColor));

        // Вывод на консоль сообщений, замечу, что сообщение начинается с новой строки и после второго сообщения идет пустая:
        Console.WriteLine("All the foreground colors on a constant black background.");
        Console.WriteLine("  (Black on black is not readable.)\n");

        //Цикл «for», действует от «0» до последнего значения массива (colorNames) (см. массивы и циклы). Используется для перебора всех возможных значений из массива:
        for (int x = 0; x < colorNames.Length; x++)
        {
            // Выводим на экран номер цвета
            Console.Write("{0,2}: ", x);
            // Присваиваем св-ву BackgroundColor черный цвет, то есть фон в дальнейшем будет черный
            Console.BackgroundColor = ConsoleColor.Black;
            // Присваиваем св-ву ForegroundColor "некого цвета". Присваиваемый цвет зависит от номера цикла.
            Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
            // Выводим информацию на экран. Обратите внимание, что цвет сообщений меняется
            Console.Write("This is foreground color {0}.", colorNames[x]);
            // Присваиваем св-вам BackgroundColor и ForegroundColor дефолтные значения.
            Console.ResetColor();
            // Вставляем пустую строку.
            Console.WriteLine();
        }

        // Выводим на консоль сообщения, замечу, что сообщения начинаются с новой строки и после второго сообщения идет пустая строка:
        Console.WriteLine("\n A constant white foreground on all the background colors.");
        Console.WriteLine("  (White on white is not readable.)\n");

        //Цикл «for», действует от «0» до последнего значения массива (colorNames) (см. массивы и циклы). Используется для перебора всех возможных значений из массива:
        for (int x = 0; x < colorNames.Length; x++)
        {
            // Выводим на экран номер цвета
            Console.Write("{0,2}: ", x);
            // Присваиваем св-ву ForegroundColor белый цвет, то есть текст в дальнейшем будет белый.
            Console.ForegroundColor = ConsoleColor.White;
            // Присваиваем св-ву BackgroundColor "некого цвета". Присваиваемый цвет зависит от номера цикла.
            Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
            // Выводим информацию на экран. Обратите внимание, что цвет фона меняется
            Console.Write("This is background color {0}.", colorNames[x]);
            // Присваиваем св-вам BackgroundColor и ForegroundColor дефолтные значения.
            Console.ResetColor();
            // Вставляем пустую строку.
            Console.WriteLine();
        }
    }
}

Отредактировано Bulax (14-05-2007 23:45:37)

6

Метод ReadKey, св-во TreatControlCAsInput

TreatControlCAsInput - Св-во, которое контролирует "реагирование" на комбинацию Ctrl+C как на системную команду
ReadKey - Перегружен. «Перехватывает» нажатую клавишу.

// Пример для метода Console.ReadKey(Boolean).
using System;
//мы будем использовать класс StringBuilder, для этого подключаем пространство имен System.Text
using System.Text;

// Задаём имя класса, в котором находится метод Main:
class MainClass
{
    // Это главный метод. С него начинается выполнение программы:
    public static void Main()
    {
        // структура ConsoleKeyInfo позволяет хранить информацию о том, какая клавиша была нажата
        // (учитывает Shift, Ctrl, Alt)

        ConsoleKeyInfo cki;
        // Вводим строковые переменные (string m2/m3/m4/m5) для пояснения действий во время исполнения программы
        String m2 = "Нажмите клавишу (+) для включение/отключения вывода на экран нажатой клавиши " +
                    "\nНажмите (Esc) для выхода: ";
        String m3 = "Вы нажали ";
        String m4 = " (символ '{0}').";
        String m5 = "  (echo {0})";
        // Вводим переменную класса StringBuilder. StringBuilder очень похож на String, но имеет больше возможностей
        // по редактированию строк.

        StringBuilder sb = new StringBuilder();
        // Вводим булевую переменную suppress, для "опеределения" надо или не надо выводить символы на экран
        Boolean suppress = false;

        // Св-во, которое контролирует "реагирование" на комбинацию Ctrl+C как на системную команду
        // (в данном случае, программа не реагирует)

        Console.TreatControlCAsInput = true;

        // начало цикла Do-while.
        do
        {
            // Выводим на экран значение переменной m2 (см. выше)
            Console.WriteLine(m2);
            // Устанавливаем длинну строки (которая храниться в StringBuilder sb). Ноль, по сути,
            // означает удаление всего, что хранилось (см. StringBuilder)

            sb.Length = 0;

            // присваиваем переменной cki значение. ReadKey считывает информацию о нажатой клавиши.
            // (учитывает Shift, Ctrl, Alt). Если suppress=false, то нажатый символ отображается на экране
            // (если true, не отображается). Если аргумент отсутствует (тоесть Console.ReadKey();), то символ
            // отображется на экране

            cki = Console.ReadKey(suppress);
            // Добавляем в sb строку из переменной m3. Строка, которая храниться в sb просто увеличивается символы
            // из m3 (см. StringBuilder)

            sb.Append(m3);

            // Несколько проверок с целью определить были ли нажаты какие-то модификационные клавиши
            // (если Да, то какие).
            // Первая проверка, были ли нажаты "модификаторы"

            if (cki.Modifiers != 0)
            {
                // был ли нажат Alt, если ДА, добавляем в строку sb симовлы "ALT+"
                if ((cki.Modifiers & ConsoleModifiers.Alt) != 0)
                    sb.Append("ALT+");
                // был ли нажат SHIFT, если ДА, добавляем в строку sb симовлы "SHIFT+"
                if ((cki.Modifiers & ConsoleModifiers.Shift) != 0)
                    sb.Append("SHIFT+");
                // был ли нажат CTRL, если ДА, добавляем в строку sb симовлы "CTRL+"
                if ((cki.Modifiers & ConsoleModifiers.Control) != 0)
                    sb.Append("CTRL+");
            }
            // Добавляем в строку sb нажатый символ.
            sb.Append(cki.Key.ToString());
            // Добавляем в строку sb символы из m4, заметте, что вместо {0}  мы подставляем нажатый символ (см. StringBuilder)
            sb.AppendFormat(m4, cki.KeyChar);
            // Добавляем две пустые строки
            sb.AppendLine().AppendLine();
            // Выводим на экран переменную m5 с форматированием. (suppress ? "OFF" : "ON") - это простейшая проверка
            // если suppress = true, то возвращается "OFF", если suppress = false; то возвращается "ON")

            Console.WriteLine(m5, (suppress ? "OFF" : "ON"));
            // Выводим все что мы насобирали в строку sb
            Console.WriteLine(sb.ToString());

            // Проверки "надо ли отображать на экране нажатый символ
            // Первая проверка, нажат ли символ "+"

            if (cki.KeyChar == '+')
            {
                // Проверка с целью поменять значение переменной suppress на противоположное.
                // Если suppress = true - присваиваем false и наоборот

                if (suppress) suppress = false;
                else suppress = true;
            }
            // Окончание цикла Do-while, если нажатый символ не Esc, то цикл повторяется.
        } while (cki.Key != ConsoleKey.Escape);
    }
}

Отредактировано Bulax (15-05-2007 00:05:06)


Вы здесь » Serge's portal: .NET developing » Console » Ввод\вывод