Несмотря на то, что рассматриваемая далее программа реализует древний
консольный ввод/вывод, в ней мы познакомимся со многими полезными
синтаксическими конструкциями языка C#. Среди них:
оператор цикла dowhile();
условный оператор if();
оператор выбора switch();
блок trycatch обработки исключительных ситуаций;
ряд других интересных инструкций.
Если представленное дальше покажется несколько удручающим и со-
вершенно непонятным — не стоит впадать в отчаяние. Здесь мы только
знакомимся с некоторыми синтаксическими конструкциями. В крайнем
случае, процедуру знакомства можно проигнорировать. Основы син-
таксиса языка 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=resnum;
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() считывается
текстовая строка, введенная пользователем. Метод вызывается без аргу-