|
Программирование >> Аргументация конструирования
Очевидно, какая-то из переменных ums или nSum (а возможно, и обе) содержит неверное значение. Для того чтобы исправить ошибку, необходимо узнать, какая именно из этих переменных содержит неверную информацию. Не помешало бы также знать, что содержится в переменной nValue, поскольку она используется для подсчета суммы в nSum. Для этого воспользуемся методом отладочной печати. Чтобы узнать значения nValue. nSum и n\iums, перепишите тело цикла for так, как показано в следуюшем листинге: for (int nNums = 0; ;nNums + +) ждет ввода следующего числа int nValue; cout < ведите следующее число: ; cin nValue; если введенное число меньше нуля... if (nValue < 0) ... тогда вывести среднее cout \пСреднее равно: nSun/nNuins \ п ; break; вывести отладочную информацию cout << nra = << nSum << \n ; cout nNums= nNums \n ; cout . nValue= nValue \n ; cout << \n ; если число больше нуля, сложить его с аккумулятором nSum += nValue; Обратите внимание на то, что информация о состоянии отслеживаемых перемен-н1х nValue, nSum и nNums выводится в каждом цикле. Ответ программы на ввод уже привычных 1, 2, 3 и -1 приведен ниже. При первом же проходе nSum принимает какое-то несуразное значение, хотя оно должно равняться нулю (поскольку к этой переменной пока что ничего не прибавлялось). Эта программа содержит ошибки! Введите следующее число:! nSum = -858993460 0 nValue= 1 Введите следующее nSum = -858993459 nNums= 1 nValue= 2 Введите следующее nSum = -858993457 nNums= 2 nValue= 3 Введите следующее число: Внимательно присмотревшись к программе, можно заметить, что nSura б1ла объявлена, но не проиниииализнроваиа. Для того чтобы исправить эту ошибку, объявление переменной необходимо изменить следующим образом: int nSura = 0; Примечание. Пока переменная не проинициализирована, ее значение непредсказуемо. Теперь, когда вы нашли все ошибки, перепишите программу так, как показано в следующем листинге: rogram - эта программа усредняет ряд чисел и не содержит ошибок iinclude <stdio.h> linclude <iostream.h> int char* cout << Эта программа работает!\n ; лирует ряд чисел, пока пользователь не введет отрицательное число, чего выводит среднее int nSum = 0; for (in ums = 0; ;nNums + +) ждет ввода следующего числа int nValue; cout << следующее cin >> nValue; если введенное число меньше нуля... if (nValue < 0) ...тогда вывести среднее cout ХпСреднее равно: nSurn/nNums << \п ; break; если число больше нуля, сложить его с аккумулятором nSum += nValue; return 0; Теперь вывод программы будет правильным. Эта программа Введите следующее Введите следующее число:2 Введите следующее число:3 Введите следующее число:-1 Среднее но: 2 Протестировав эту программу другими наборами я убедился, что она работает без ошибок. иснмьзование о/нми/члша в небольших программах метол отладочной печати работает довольно неплохо. Добавление отладочных команд - достаточно простой и не влияющий на время компиляции способ пахождения ошибок, с помошью которого можно быстро отыскать ошибку, если программа невелика. В действительно больших программах зачастую программист даже не знает, куда нужно добавлять отладочные команды. Работа по добавлению отладочн1х команд, перезапуску программы, повторному добавлению отладочных команд и так далее становится утомительной. Кроме того, после каждого переписывания программу нужно собирать заново. Не забывайте, что в большой программе один только процесс сборки может занять немало времени. В конце концов, с помощью этого метода почти невозможно найти ошибку, связанную с указателями. Указатель, выведенный на экран адатеричном виде, мало о чем скажет вам, и, пока программист поймет, что нужно сделать для исправления ошибки, программа успеет морально устареть. Второй, метод использование отдельной утилиты, которая называется отладчиком. С помощью отладчика можно избежать трудностей, возникающих при использовании методики отладочной печати (однако, если вы хотите использовать отладчик, вам придется научиться с ним работать). Что такое отладчик Отладчик - это утилита, встроенная, например, в rhide или Microsoft Visual С+ + (в этих приложениях разные программы отладчиков, однако работают они по одному принципу). Программист управляет отладчиком с помощью команд так же, как, например, при редактировании или компиляции программы. Команды отладчика можно выполнять с помощью контекстных меню или горячих клавиш. Отладчик позволяет программисту контролировать работу программы по ходу ее выполнения. С помощью отладчика можно выполнять программу в пошаговом режиме, останавливать ее в любой и просматривать содержимое любой переменной. Чтобы оценить удобство отладчика, его нужно увидеть в действии. В этом разделе преимущества отладчика показаны при работе с небольшой программой (я использовал отладчик rhide, но отладчик в Visual C++ работает очень похоже). Выбор отладчика В отличие от стандартизированного языка C + + , набор команд, поддерживаемый отладчиком, варьируется от производителя к производителю. К счастью, большинство отладчиков поддерживают некоторый базовый набор команд. Необходимые нам команды есть в обеих средах разработчика, описанных в этой книге. В GNU C + + и Visual C++ существует возможность вызова этих команд с помощью меню и функциональных клавши. В табл. приведен список основных команд и кла- виш их вызова.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |