Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курс лекций CS (первый семестр)

.pdf
Скачиваний:
7
Добавлен:
20.05.2015
Размер:
2.69 Mб
Скачать

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

int b = 0;

buf = Console.ReadLine();

if (!ProverkaCel(buf))

{

Console.WriteLine("Ошибка ввода");

return;

}

b = Convert.ToInt32(buf);

Console.WriteLine(b);

Console.WriteLine("Введите число");

double c = 0;

buf = Console.ReadLine();

if (!ProverkaVesh(buf))

{

Console.WriteLine("Ошибка ввода");

return;

}

c = Convert.ToDouble(buf);

Console.WriteLine(c);

}

}

}

Результат.

181

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

182

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №27.

Ввод и вывод с использованием класса Console.

В большинстве созданных нами приложений использовался класс System.Console - один из многих классов, определенных внутри пространства имен System. Как уже можно было заметить, этот класс предназначен для работы с вводом и выводом с использованием системной консоли (которую иногда также называют командной строкой). Главные методы класса Consolе — это методы ReadLine() и WriteLine(). WriteLine(), как мы неоднократно могли убедиться, выводит символьную строку (дополняя ее в конце символами перехода на новую строку и возврата каретки) на системную консоль. Метод Write() делает то же самое, но уже без дополнения символами перехода на новую строку. Метод ReadLine() позволяет считать информацию с системной консоли до ближайшего символа переходи на новую строку, метод Read() считывает с системной консоли единственный символ.

Первый параметр, передаваемый WriteLine(), представляет собой строку форматирования с подстановочными выражениями {0}, {1}, {2} и т. п. Остальные параметры WriteLine() - это как раз те значения, которые последовательно подставляются в места, обозначенные подстановочными выражениями.

В каждом подстановочном выражении при желании можно использовать параметры форматирования, представленные в таблице (эти параметры можно записывать как строчными, так и прописными буквами).

Параметр

Значение

 

 

 

Используется для вывода значений в денежном формате. По умолчанию

С или с

после выводимого значения вставляется символ р.

 

 

 

 

Используется для вывода целых значений. После этого символа можно

D или d

указать количество выводимых символов.

 

 

 

 

Для вывода значений в экспоненциальном формате. После этого символа

Е или е

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

 

 

 

 

Вывод значений с фиксированной точностью. После этого символа можно

F или f

указать количество выводимых символов после запятой.

 

 

 

 

Общий формат. Применяется для вывода значений с фиксированной

G или g

точностью или в экспоненциальном формате.

 

 

 

 

Стандартное числовое форматирование с использованием разделителей

 

 

183

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

N или n

(пробелов) между разрядами.

 

Вывод значений в шестнадцатеричном формате. Если вы использовали

X или х

прописную X, то буквенные символы в шестнадцатеричных символах также

будут прописными

 

Символы форматирования следуют в подстановочных выражениях сразу же за номером подставляемого параметра через двоеточие: ,0:С-, ,l:d-, ,2:X- и т. д.

Пример. using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("C format:");

Console.WriteLine("{0:C}", 99989.987);

Console.WriteLine("{0:C3}", 99989.987);

Console.WriteLine("{0:C5}", 99989.987);

Console.WriteLine("{0:C1}", 99989.987);

Console.WriteLine("\nD format:");

Console.WriteLine("{0:D}", 99999);

184

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Console.WriteLine("{0:D2}", 99999);

Console.WriteLine("{0:D5}", 99999);

Console.WriteLine("{0:D9}", 99999);

Console.WriteLine("\nE format:");

Console.WriteLine("{0:E}", 99999.76543);

Console.WriteLine("{0:E8}", 99999.76543);

Console.WriteLine("{0:E10}", 99999.76543);

Console.WriteLine("\nF format:");

Console.WriteLine("{0:F}", 99999.9999);

Console.WriteLine("{0:F3}", 99999.9999);

Console.WriteLine("{0:F4}", 99999.9999);

Console.WriteLine("{0:F10}", 99999.9999);

Console.WriteLine("\nG format:");

Console.WriteLine("{0:g}", 99999.9999);

Console.WriteLine("{0:g3}", 99999.9999);

Console.WriteLine("{0:g4}", 99999.9999);

Console.WriteLine("{0:g10}", 99999.9999);

Console.WriteLine("\nN format:");

Console.WriteLine("{0:N}", 99999.9999);

Console.WriteLine("{0:N4}", 99999.9999);

Console.WriteLine("\nX format:");

Console.WriteLine("{0:X}", 99999);

Console.WriteLine("x format: {0:x}", 99999);

185

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

}

}

}

Результат.

186

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №28.

Отладка программы и обработка ошибок.

Ошибки в программе — это такая вещь, от которой никогда не удастся избавиться. Независимо от того, насколько опытным является программист, у него всегда будут проскальзывать ошибки; составной частью понятия "опытный программист" как раз и является понимание этой неизбежности и готовности с ними бороться. Конечно, существуют некоторые незначительные ошибки, которые не оказывают влияния на ход выполнения приложения, такие, например, как ошибки в правописании выводимого текста и т. п. Кроме того, существуют очевидные ошибки, которые приводят к абсолютной невозможности использования приложения (их обычно называют фатальными). К разряду фатальных ошибок относятся как простые ошибки, которые препятствуют компиляции программы (синтаксические ошибки), так и более сложные ошибки, которые проявляются только в процессе выполнения кода. Однако могут встречаться еще более тонкие ошибки. Например, написанное приложение не сможет включить в базу данных запись, у которой отсутствует одно из обязательных полей, или в случае возникновения каких-либо исключительных обстоятельств включит в запись неверные данные. Ошибки, подобные этим, когда некоторый изъян содержится в логике приложения, известны под названием семантических ошибок (или ошибок в логике). Очень часто вы будете узнавать о наличии тонких ошибок в ваших приложениях тогда, когда пользователь пожалуется, что что-то работает неправильно. В результате вам придется выполнить трассировку программы, чтобы определить, в чем именно проблема и каким образом следует изменить код, чтобы он выполнял те действия, для которых был предназначен. В подобных ситуациях вы обнаружите, что возможности для отладки программ, предоставляемые VS, могут оказать вам ни с чем не сравнимую помощь.

Кроме этого, мы изучим способы обработки ошибок, имеющиеся в С#. Это позволит нам принимать соответствующие меры предосторожности в тех случаях, когда появление ошибок наиболее вероятно, и создавать код, который окажется в состоянии справляться с ошибками, могущими в противном случае стать фатальными. Такие способы представляют собой составную часть языка С#, а не отладочные возможности VS, однако и в этом случае VS предлагает некоторые весьма полезные инструменты.

Отладка в Visual Studio.

Когда программы запускаются в отладочном режиме, происходит нечто большее, чем просто выполнение написанного кода. При отладке создается некоторая символьная информация о приложении, которая позволяет VS быть в курсе того, что именно происходит при выполнении каждой строки кода. Под символьной информацией понимается, например, информация, которая позволяет устанавливать соответствие между именами, используемыми в исходном коде, и значениями, которые существуют в скомпилированном в машинные коды приложении, не содержащем информации в удобной для чтения форме. Символьная информация помещается в файлы с расширением .pdb, которые вы, вероятно, встречали в директориях Debug на вашем компьютере. Эта информация позволяет выполнять множество полезных действий, например:

Передачу отладочной информации системе VS

Просмотр (и редактирование) значений рабочих переменных

187

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

в процессе выполнения приложения

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

Автоматическое прекращение выполнения программы

в заранее заданных точках

Пошаговое выполнение программы (по одной строке кода за шаг)

Отслеживание изменений содержимого переменных

в процессе выполнения приложения

Изменение содержимого переменных в момент выполнения

Осуществление тестовых вызовов функций На этой лекции вы познакомитесь с этими методами, а также с их использованием для

определения участков кода, которые работают не так, как ожидается, и внесения в них исправлений, т. е. для процесса, более известного под названием "отладка". Все эти методы разделены на две группы по тому, каким образом они могут быть применены. Вообще говоря, процедура отладки заключается в том, чтобы либо прекращать выполнение программы, либо сохранять информацию для последующего анализа. В терминах VS приложение может находится либо в режиме выполнения, либо в режиме останова (break mode), означающем, что нормальное выполнение программы прервано. Сначала мы рассмотрим методы отладки программы без прекращения ее выполнения (методы периода выполнения, или нормальные методы).

Отладка в режиме останова.

Перейти в режим останова можно несколькими способами, и все они тем или иным путем приводят к временной остановке выполнения программы. Простейшим способом перехода в режим останова является нажатие кнопки паузы в VS в процессе выполнения приложения. Эта кнопка располагается на панели инструментов Debug, которую необходимо добавить к тем панелям инструментов, которые появляются в VS по умолчанию. Для этого следует щелкнуть правой кнопкой мыши в области панели инструментов и выбрать панель Debug.

Появившаяся панель инструментов имеет вид:

188

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Первые четыре кнопки на этой панели предназначены для ручного управления остановкой программы. Три из них окрашены в серый цвет, так как они не могут работать с программой, которая не выполняется в настоящий момент. Доступная кнопка - "старт" - идентична кнопке, расположенной на стандартной панели инструментов. После запуска приложения панель инструментов принимает вид:

Теперь те три кнопки, которые прежде были серого цвета, перешли в рабочее состояние и позволяют:

Временно прекратить выполнение приложения (сделать паузу) и перейти в режим останова.

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

Заново запустить приложение.

Пауза, пожалуй, является наиболее простым способом перехода в режим останова, но она не дает возможности точно определить, в каком именно месте приложение будет остановлено. Наиболее распространено использование естественных остановок в работе приложения, например, когда приложение ожидает ввода информации от пользователя. Существует также возможность временной остановки приложения при выполнении какой-либо продолжительной операции или длинного цикла, но в этом случае конкретная точка, в которой мы остановимся, окажется абсолютно случайной. В общем случае гораздо полезнее использовать точки останова (breakpoints). Точка останова — это некоторый маркер в исходном коде, который вызывает автоматическое переключение в режим останова. Возможны следующие настройки:

Переходить в режим останова немедленно по достижении точки останова.

Переходить в режим останова по достижении точки останова в том случае, если логическое выражение имеет значение true.

Переходить в режим останова по достижении точки останова заданное число раз.

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

Обратите внимание, что все перечисленное выше оказывается возможным только в том случае,

если приложение строилось в отладочном режиме. Если же откомпилировать приложение с построением окончательного варианта, то все точки останова будут проигнорированы.

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

189

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

или нажать правую кнопку мыши на самой строке и выбрать пункт меню Insert Breakpoint (вставка точки останова):

Включение точки останова приведет к появлению красного кружка рядом с соответствующей строкой кода и к выделению самой строки. Количество точек останова неограниченно.

У точек останова можно устанавливать свойства с помощью контекстного меню, которое появляется при щелчке правой кнопкой мыши на точке останова.

190