Пример 3

/* Центрирование строк текста. Пример на работу с указателями. */
/* Входные строки не должны содержать табуляций                */
/* Вызов: a.out < входной_файл                                 */

#include <stdio.h>
extern char *gets();
#define WIDTH 60        /* ширина листа */
main(){
        char rd[81]; register char *s;
        char *head,        /* начало текста */
             *tail;        /* конец текста  */
        register int len, i;
        int shift;         /* отступ */

      /* Читать со стандартного ввода в rd по одной строке,
       * пока файл не кончится. При вводе с клавиатуры конец файла
       * обозначается нажатием клавиш CTRL+D
       */
        while( gets( rd ) != NULL ){
            if( !*rd ){
                /* Строка пуста */
                putchar( '\n' ); continue;
            }
            /* пропуск пробелов в начале строки */
            for( s = rd; *s == ' ' ; s++ );
            if( ! *s ){
                /* Строка состоит только из пробелов */
                putchar( '\n' ); continue;
            }
            head = s;

            /* встать на конец строки */
            while( *s ) s++;

            /* искать последний непробел */
            s--;
            while( *s == ' ' && s != rd ) s--;
            tail = s;

            /* Длина текста */ len = (tail-head) + 1;
            /* разность указателей - целое */
            shift = (WIDTH - len)/2;
            if(shift < 0 ){
                fprintf(stderr, "Строка длиннее чем %d\n", WIDTH );
                shift = 0;
            }
            /* Печать результата */
            for( i=0; i < shift; i++ ) putchar( ' ' );

            while( head <= tail ) putchar( *head++ );
            putchar( '\n' );
        }
}

© Copyright А. Богатырев, 1992-95 www.abyss-group.narod.ru
Си в UNIX

Назад | Содержание | Вперед

Hosted by uCoz