lab1-2005 (1080909), страница 2
Текст из файла (страница 2)
следующим оператором:
cout << "Добро пожаловать в C++ !" << endl;
Откомпилируйте (точнее говоря, скомпонуйте) программу и запустите ее на выполнение. Результат будет настолько безобразным, что рисунок-копию экрана мы здесь приводить не станем.
1.4.2. Проблемы с вводом-выводом кириллицы
Работа в среде Visual C++ 2005 (в режиме консольных приложений) сопряжена с определенными неудобствами, вызванными различными стандартами кодировки символов кириллицы в операционных системах MS DOS и Windows. Напомним, что весь ввод-вывод в консольном окне идет в кодировке стандарта ASCII, а текст в исходных файлах, набираемый в текстовом редакторе Visual C++, имеет кодировку в стандарте ANSI.
С учетом сказанного выше можно предложить следующую адаптацию ваших программ к местным (российским) условиям при работе в режиме консольных приложений:
-
Не используйте в одной программе кириллицу в операторах вывода строковых констант из программы (текст в окне программы имеет кодировку в стандарте ANSI) и для вывода текста, введенного с клавиатуры (ввод идет в кодировке ASCII). Если вам необходимо выводить вводимый с клавиатуры русский текст, то приглашение для ввода текста в программе пишите на латинице.
-
Если в прграмме не нужно делать ввод текста на кириллице, то для вывода текстовых сообщений на кириллице в начало функции main() программы следует вставить оператор setlocale(0,”russian”), который устанавливает режим перекодировки символов из стандарта ANSI в стандарт ASCII.
////////////////////////////////////////////
#include <iostream >
using namespace std;
int main(){
char str1[80];
setlocale(0,”russian”);
// cout << "Welcome to C++ !" << endl;
cout << “Дoбpo пожаловать в C++ !" << endl;
// cout << "Enter the string:" <<endl;
cout << "Введите строку:" << endl;
cin >> str1;
// cout <<"The value strl = " << endl;
cout << "Знaчение строки str1 = " << endl;
cout << str1 << endl;
return 0;
}
//////////////////////////////////////////////////////////
Ничего не принимайте на веру. Немедленно, прямо сейчас (!) откомпилируйте эту программу и убедитесь, что она дает ожидаемый результат.
1.5. Конфигурация проекта
Visual C++ позволяет строить проект либо в отладочной конфигурации (Win32 Debug), либо в выпускной конфигурации (Win32 Release). Мы рекомендуем вам всегда работать с проектами в отладочной конфигурации. Обычно она установлена по умолчанию. Все же не мешает проверить, с какой конфигурацией на самом деле идет работа. Для этого выберите в меню Project пункт Settings... Откроется диалоговое окно Project Settings. Проверьте, какое значение установлено в окне комбинированного списка Settings For:.. Если это не Win32 Debug, то переключитесь на нужное значение через команду меню Build ► Set Active Configuration...
1.6. Как закончить работу над проектом
Можно выбрать меню File, пункт Close Solution. А можно просто закрыть приложение Visual C++.
1.7. Как открыть проект, над которым вы работали ранее
1. Способ первый:
-
Запустите на выполнение Visual C++.
-
Выберите меню File, пункт Open ...
-
В открывшемся диалоговом окне найдите папку с вашим проектом, а в ней — файл ProjectName.vcproj.
-
Откройте этот файл, щелкнув по нему мышью.
2. Способ второй:
■ Запустите на выполнение Visual C++.
-
Выберите меню File, наведите курсор мыши на пункт Recent Workspaces.
-
Если в появившемся меню со списком последних файлов, с которыми шла
работа, вы найдете интересующий вас файл ProjectName.vcproj, то щелкните по
нему мышью.
3. Способ третий:
-
Не вызывая Visual C++, найдите папку с вашим проектом, а в ней — файл
ProjectName.vcproj.
-
Щелкните мышью на файле ProjectName.vcproj.
1.8. Встроенная справочная система
В IDE Visual С ++ имеется обширная справочная система, доступная через меню Help главного окна.
Кроме этого, очень удобно пользоваться интерактивной справкой: если вы находитесь в окне Editor, поставьте текстовый курсор на интересующий вас оператор или библиотечную функцию C++ и нажмите клавишу F1. Тотчас будет вызвана справочная система MSDN (если она установлена) с предоставлением необходимой информации. Если запрошенный термин встречается в разных разделах MSDN, то сначала появится диалоговое окно «Найденные разделы». В списке разделов выберите тот, в котором упоминается «Visual C++».
1.9. Работа с отладчиком
Полное описание возможностей встроенного отладчика Visual C++ и приемов работы с ним может потребовать отдельной книги, настолько объемна эта тема. Поэтому здесь приведены только начальные сведения о работе с отладчиком Visual C++. Проще всего это сделать, написав программу, заведомо содержащую несколько ошибок, а затем показав, как с помощью отладчика можно найти и исправить эти ошибки.
В частности, мы научимся устанавливать в программе точки прерывания и выполнять ее до заданной точки. Когда во время выполнения встречается точка прерывания, программа останавливается, а на экране появляется отлаживаемый код. Это дает возможность детально выяснить, что происходит в программе.
Кроме того, программу можно выполнять последовательно, строку за строкой — такой процесс называется пошаговым выполнением. Этот режим позволяет следить за тем, как изменяются значения различных переменных. Иногда он помогает понять, в чем заключается проблема: если обнаруживается, что переменная принимает неожиданное значение, то это может послужить отправной точкой для выявления ошибки. После обнаружения ошибки ее можно исправить и выполнить программу заново в отладочном режиме.
Назовем нашу программу (проект) именем Buggy. Программа должна вычислять среднее арифметическое первых пяти натуральных чисел: 1-5. Нетрудно догадаться, что ответ должен быть равен 3, однако из-за специально сделанных ошибок программа первоначально будет выдавать неправильный ответ.
Для создания программы выполните следующие действия:
-
Создайте проект типа «консольное приложение» с именем Buggy.
-
Добавьте к проекту файл buggy.срр и заполните его следующим текстом:
#include <iostream>
using namespace std;
int main()
{ const N = 5;
int a[N] = {1, 2, 3, 4, 5};
float sum, average;
int i;
for (i = 1: i < N: i++) sum += a[i];
average = sum / N;
cout << "average = " << average << endl;
return 0;
}
□ Откомпилируйте проект.
□ Запустите программу на выполнение.
Вы должны увидеть в консольном окне приложения нечто вроде следующего результата:
average = -2.14748e+007,
т. е. программа вычислила, что среднее арифметическое первых пяти целых чисел
равно -21474800 (на вашем компьютере может быть и другое число), а это мало
похоже на число 3.0.
Начнем отладку нашей злополучной программы.
1.9.1. Установка точки прерывания
Точка прерывания позволяет остановить выполнение программы перед любой выполняемой инструкцией (оператором) с тем, чтобы продолжать выполнение программы либо в пошаговом режиме, либо в непрерывном режиме до следующей точки прерывания.
Чтобы задать точку прерывания перед некоторым оператором, необходимо установить перед ним текстовый курсор и нажать клавишу F9 или щелкнуть мышью на кнопке Insert/Remove Breakpoint на панели инструментов Build MiniBar. Точка прерывания обозначается в виде коричневого кружка на левом поле окна редактирования. Повторный щелчок на указанной кнопке снимает точку прерывания. В программе может быть несколько точек прерывания.
1.9.2. Выполнение программы до точки прерывания
Программа запускается в отладочном режиме с помощью команды Build ► Start Debug (или нажатием клавиши F5).
В результате код программы выполняется до строки, на которой установлена точка прерывания. Затем программа останавливается и отображает в окне Editor ту часть кода, где находится точка прерывания, причем желтая стрелка на левом поле указывает на строку, которая будет выполняться на следующем шаге отладки. Продолжим демонстрацию описываемых средств на примере программы Buggy:
-
Установите точку прерывания перед оператором for.
-
Запустите программу в отладочном режиме, нажав клавишу F5.
Обратите внимание — в Visual C++ на панели инструментов появилось меню Debug. Заглянем в него из любопытства.
Среди различных команд этого меню особый интерес представляют команды Step Into (F11), Step Over (F10), Step Out (Shift+F11), Run To Cursor (Ctrl+F10) и Stop Debugging (Shift+F5).
Выбор последней команды (или нажатие комбинации клавиш Shift+F5) вызывает завершение работы с отладчиком.
1.9.3. Пошаговое выполнение программы
Нажимая клавишу F10, можно выполнять один оператор программы за другим.
Предположим, что при пошаговом выполнении программы вы дошли до строки, в которой вызывается некоторая функция func1(). Если вы хотите пройти через код вызываемой функции, то надо нажать клавишу F11. Если же внутренняя работа функции вас не интересует, а интересен только результат ее выполнения, то надо нажать клавишу F10.
Допустим, что вы вошли в код функции func1(), нажав клавишу F11, но через несколько строк решили выйти из него, т. е. продолжить отладку после возврата из функции. В этом случае надо нажать клавиши Shift+F11.
Существует и другая возможность пропустить пошаговое выполнение некоторого куска программы: установите текстовый курсор в нужное место программы и нажмите клавиши Ctrl+F10.
Продолжим отладку программы Buggy:
□ Нажмите клавишу F10.
Указатель следующей выполняемой команды переместится на оператор
sum += a[i];
1.9.4. Проверка значений переменных во время выполнения программы
Чтобы узнать значение переменной sum, в которой будет накапливаться сумма элементов массива а, задержите над ней указатель мыши. Рядом с именем переменной на экране появляется подсказка со значением этой переменной:
sum = -1.07374e+008 (или с другим произвольным значением).
Ага!!! Ведь еще не было никакого суммирования и, следовательно, переменная sum, по идее, должна быть равна нулю. Вот где собака зарыта! Мы забыли обнулить переменную sum до входа в цикл.
□ Нажмите комбинацию клавиш Shift+F5, чтобы выйти из отладчика и исправить
найденную ошибку. Найдите строку с объявлением
float sum, average;
и добавьте в нее инициализацию переменной sum: float sum = 0, average;
□ Откомпилируйте заново проект — кнопка Build (F7).
□ Запустите на выполнение — кнопка Execute Program (Ctrl+F5).
Вы получите новый результат:
average = 2.8
Это как бы теплее, но все равно еще неправильно. Нажмите любую клавишу для завершения работы приложения. Необходимо продолжить отладку:
-
Установите точку прерывания перед оператором for. .
-
Запустите программу в отладочном режиме, нажав клавишу F5.
-
Нажмите клавишу F10.
Указатель следующей выполняемой команды переместится на оператор
sum += a[i];
□ Нажмите клавишу F10.
Указатель следующей выполняемой команды переместится на оператор
for (i = 1; i < N; i++)
□ Задержите теперь над переменной sum указатель мыши. Рядом с именем переменной на экране появится подсказка со значением этой переменной
sum = 2.
Стоп!!! Позади 1-я итерация цикла, и в переменной sum должно находиться значение первого элемента массива а, т. е. число 1. А мы имеем число 2, то есть значение второго элемента массива а. Пришло время вспомнить, что в языке C++ нумерация элементов массива начинается с 0! Поэтому ошибка находится в заголовке цикла:
for (i = 1; i < N;i++)
и ее нужно немедленно исправить. Повторите действия, направленные на исправление ошибки:
-
выйти из отладчика,
-
исправить текст программы в операторе for:
for (i = 0: i < N; i++-)
-
откомпилировать,
-
запустить на выполнение.
Если в процессе исправления вы не внесли новых ошибок, то должен получиться результат:
average = 3.0.
Итак, все ОК! — программа работает правильно.
В заключение отметим, что отладчик предоставляет и другие возможности для наблюдения за значениями переменных во время выполнения программы.
1.9.5. Окна Auto и Watch 1
Помимо экранной подсказки, переменная sum со своим значением отображается в окне Auto, расположенном в левом нижнем углу экрана (см. риc.7). В этом окне приведены значения последних переменных, с которыми работал Visual C++.
Кроме этого, в окне Watch 1, которое находится в правом нижнем углу, можно задать имя любой переменной, за значениями которой вы хотите понаблюдать.
Более подробно о работе с этими окнами можно почитать в справочной системе через меню Help главного окна Visual C++. То, что она написана на английском языке, ни в коей мере не должно вас останавливать!