Выбрать главу

Несмотря на то, что рассматриваемая далее программа реализует древний

консольный ввод/вывод, в ней мы познакомимся со многими полезными

синтаксическими конструкциями языка C#. Среди них:

 оператор цикла do­while();

 условный оператор if();

 оператор выбора switch();

 блок try­catch обработки исключительных ситуаций;

 ряд других интересных инструкций.

Если представленное дальше покажется несколько удручающим и со-

вершенно непонятным — не стоит впадать в отчаяние. Здесь мы только

знакомимся с некоторыми синтаксическими конструкциями. В крайнем

случае, процедуру знакомства можно проигнорировать. Основы син-

таксиса языка C# обсуждаются более детально в следующих главах.

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

следовательно выполнять всего четыре действия: сложение, вычитание, умножение и деление. Принцип взаимодействия пользователя с програм-

мой через консольное окно следующий. Пользователь вводит число, затем

символ операции (один из символов «+» (сложение), «­» (вычитание), «*»

(умножение) или «/» (деление)) и новое число. С введенными числами

выполняется соответствующая операция, а пользователь может ввести

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

сто символа операции не введет ключевое слово exit. Код этой программы

приведен в листинге 1.3.

Листинг 1.3.  Консольная программа - калькулятор

using System;

class Calculator{

// Главный метод программы:

static void Main(){

// Переменные для запоминания

// числовых значений:

double res=0, num;

// Символьная переменная для

// запоминания оператора:

char op = '+';

продолжение

44

Глава 1. Информация к размышлению: язык C# и даже больше

Листинг 1.3 (продолжение)

// Текстовая переменная для

// запоминания ввода пользователя:

string text="";

// Отображение текста в консольном окне:

Console.WriteLine("Начинаем вычисления. Завершение - exit.");

// Блок контроля исключительных ситуаций:

try{

// Оператор цикла:

do{

// Приглашение ввести число:

Console.Write("Ведите число:\t");

// Считывание числа:

num = Double.Parse(Console.ReadLine());

// Оператор выбора:

switch(op){ // Перебор вариантов

// Сложение:

case '+':

res=res+num;

break;

// Вычитание:

case '-':

res=res­num;

break;

// Умножение:

case '*':

res=res*num;

break;

// Деление:

case '/':

res=res/num;

break;

}

// Отображение текущего значения:

Console.WriteLine("Результат:\t"+res);

// Приглашение для ввода символа операции:

Console.Write("Операция:\t");

// Считывание текста:

text=Console.ReadLine();

// Условный оператор - проверка

// команды выхода:

if(text.Equals("exit")) break;

// Попытка определить символ:

op=Char.Parse(text);

// Условный оператор - проверка

// символа операции:

if(!(op=='+'|op=='-'|op=='*'|op=='/')){

Консольная программа           45

// Отображение сообщения и завершение

// работы оператора цикла:

Console.WriteLine("Такая операция недопустима!"); break;

}

// Условие продолжения цикла:

}while (true);

}catch{

// Обработка исключительной ситуации:

Console.WriteLine("Выполнена недопустимая команда.");

}

// Сообщение о завершении работы программы:

Console.Write("Вычисления закончены. Нажмите клавишу Enter...");

// Ожидание нажатия клавиши Enter:

Console.ReadLine();

}

}

В среде Visual C# Express создаем консольное приложение. Для этого

в  окне  создания  нового  проекта  Создать  проект  выбираем  пункт

Консольное приложение, как показано на рис. 1.14.

Рис. 1.14.  Создание консольного приложения

Дальше все практически так же, как и в случае создания приложения

с графическим интерфейсом. Однако в консольном приложении форм

нет, поэтому ничего удалять не придется.

46

Глава 1. Информация к размышлению: язык C# и даже больше

Командой using System подключается пространство имен System. Это

необходимо сделать для того, чтобы стали доступными методы класса

Console для работы с консольным устройством. В частности, речь идет

о методах Write(), WriteLine() и ReadLine(), которые вызываются с ука-

занием класса Console. Первые два метода выводят на экран текстовое

значение, указанное аргументом. Разница между этими методами состо-

ит в том, что при использовании метода WriteLine() курсор вывода пере-

водится в новую строку (после завершения вывода), а для метода Write() он остается в той же строке. С помощью метода ReadLine() считывается

текстовая строка, введенная пользователем. Метод вызывается без аргу-