Отладка программ с помощью функций вывода

Сегодня существует большое количество IDE (от англ. Integrated Development Environment — интегрированная среда разработки), которые облегчают написание программ благодаря различным встроенным средствам. Одним из наиболее распространенных и чаще всего используемых таких средств является Debug — программа-отладчик, которую используют для проверки и отладки выполняемых файлов. С его помощью можно осуществлять пошаговое выполнение программы, текущее состояние переменных и многое другое. Однако, если Вы пишете маленькую программу, создавать ради нее целый проект порой нет смысла. В этом случае намного удобнее будет написать код в текстовом редакторе с подсветкой синтаксиса и скомпилировать его вручную. Однако здесь возникает вопрос — а как же отлаживать тогда программу? Именно об этом и пойдет речь в данной статье.

Подготовка

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

Программа довольно простая. Алгоритм ее следующий:

  1. Ввод строки
  2. Получение первого слова
  3. Вывод

Для второго пункта опишем функцию, которая будет называться, например, getFirstWord. Кстати, программу будем писать на языке C.

Код функции main

int main() {
char str[100], 						// Исходная строка
dest[100];						// Строка для первого слова
puts("Enter a string");
gets(str);							// Ввод строки
getFirstWord(dest, str);			// Функция получающая первое слово строки
printf("First word - %s\n", dest);	// Вывод
return 0;
}

Тут все написано в точности, как и в вышеописанном алгоритме. Приступим теперь к написанию самой функции.

Код функции

void getFirstWord(char *dest, char *src) {
while (*src && *src == ' ') {		// Пропуск пробелов
src++;							//
}									//
while (*src && *src != ' ') {		// Пока не конец строки и не пробел
*dest++ = *src++;				// Запись в dest символов src
}									//
*dest = '\0';						// Установка признака конца строки
}

Код всей программы

#include <stdio.h>
void getFirstWord(char *dest, char *src) {
while (*src && *src == ' ') {		// Пропуск пробелов
src++;							//
}									//
while (*src && *src != ' ') {		// Пока не конец строки и не пробел
*dest++ = *src++;				// Запись в dest символов src
}									//
*dest = '\0';						// Установка признака конца строки
}
int main() {
char str[100], 						// Исходная строка
dest[100];						// Строка для первого слова
puts("Enter a string");
gets(str);							// Ввод строки
getFirstWord(dest, str);			// Функция получающая первое слово строки
printf("First word - %s\n", dest);	// Вывод
return 0;
}

Это полностью рабочая программа. Ее и отлаживать вообще не нужно, однако давайте предположим, что у нас есть ошибки в функции getFirstWord. Даже нарочно допустим их. Например, уберем символы в некоторых местах, тогда новый код будет следующим:

void getFirstWord(char *dest, char *src) {
while (src && *src == ' ') {		// Было *src && *src == ' '
src++;							//
}									//
while (src && *src != ' ') {		// Было *src && *src == ' '
*dest++ = *src++;				//
}									//
*dest = '\0';						// Установка признака конца строки
}

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

void getFirstWord(char *dest, char *src) {
while (src && *src == ' ') {		// Было *src && *src == ' '
src++;							//
}									//
printf("First loop finished\n");
while (src && *src != ' ') {		// Было *src && *src == ' '
*dest++ = *src++;				//
}									//
printf("Second loop finished\n");
*dest = '\0';						// Установка признака конца строки
printf("%s\n", dest);
}

При запуске программы введем строку Hello. В консоли будет выведено

Отладка программ с помощью функций вывода (C, Debug, Отладка, Полезно)

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *