Отладочная печать — это простой и достаточно эффективный метод поиска ошибок в программе. Он состоит в выводе (на экран или в файл) значениий переменных, вызовов функций, сообщений о выполнении итерации цикла или другой служебной информации в процессе работы программы. Результат этой печати представялет интерес для программиста, который пытается найти и исправить ошибку в программе.

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

#include <stdio.h>

int main() {
    int current = 0; /* текущий элемент последовательности */
    int maximum = 0; /* максимальное значение на данный момент */

    printf("Введите последовательность чисел и нажмите <Enter>\n");
    printf("0 - символ конца последовательности\n");

    /* Считываем первый элемент последовательности */
    if(scanf("%d", &current) != 1 || current == 0) {
        printf("Не удалось прочитать первый элемент\n");
        return -1;
    }
    maximum = current;

    /* Обрабатываем все остальные элементы */
    while(scanf("%d", &current) == 1 && current != 0) {
        fprintf(stderr, "Значение новго элемента последовательности current = %d\n", current);
        fprintf(stderr, "Текущее значение максимума = %d\n", maximum);
        if(current > maximum) {
            maximum = current;
        }
        fprintf(stderr, "Значение максимума после сравнения = %d\n\n", maximum);
    }

    /* Печатаем ответ */
    printf("Максимальное значение = %d\n", maximum);
    return 0;
} 
По сравнению с исходной версией в программе появились три строчки вида fprintf(stderr, .... На каждой итерации цикла, то есть при прочтении очередного элемента последовательности, на экран будет выводиться три строчки. Например:
Введите последовательность чисел и нажмите <Enter>
0 - символ конца последовательности
1
3
Значение новго элемента последовательности current = 3
Текущее значение максимума = 1
Значение максимума после сравнения = 3

5
Значение новго элемента последовательности current = 5
Текущее значение максимума = 3
Значение максимума после сравнения = 5

1
Значение новго элемента последовательности current = 1
Текущее значение максимума = 5
Значение максимума после сравнения = 5

0
Максимальное значение = 5
Заметим, что вервое введенное число (1) не привло к печати сообщений, так как оно обрабатывается вне цикла while. После введения второго элемента последовательности (3) происходит вывод отладочной инофрмации.

Обратите внимание, что последний вызов fprintf печатает строчку и два символа перевода строки \n. Это позволяет сделать выдачу более наглядной, так как строки визуально разделяются на группы, что позволяет быстрее разобраться в полученных данных.

Если Вы решили вставить отладочную печать в свою програму, то не жалейте времени для формирования "красивой" выдачи. Указывайте имена переменных, вставляйте разделители (типа пустой строки в нашем примере). Не удаляйте отладочную печать сразу после исправления ошибки (она может понадобиться еще раз).

Используйте для отладочной печати поток вывода stderr. В отличие от "обычной" печати printf("что-то"), которая может быть выполнена с задержкой по времени (так называемый буферизованный ввод-вывод), печать в stderr выполняется сразу. То есть, если Вы не видите текста своего сообщения, то значит эта строчка fprintf(stderr, ...) не выполнялась.