Книга: Язык Си - руководство для начинающих

АРГУМЕНТЫ ФУНКЦИИ

     Титул фирменного бланка выглядел бы несколько лучше, если бы текст был сдвинут к центру. Мы сможем поместить текст в центре, если напечатаем нужное число пробелов перед выводом требуемой строки. Воспользуемся некоторой функцией для печати пробелов. Наша функция space( ) (давайте назовем ее так) будет очень напоминать функцию starbar( ), за исключением того, что на этот раз между функцией main( ) и функцией space( ) должна быть установлена связь, так как необходимо сообщить последней функции о требуемом числе пробелов.

     Рассмотрим это более конкретно. В строке, состоящей из звездочек, 65 символов, а в строке MEGATHINK, INC. - 15. Поэтому в нашем первом варианте программы вслед за этим сообщением шло 50 пробелов. Чтобы сместить текст к центру, нужно сначала напечатать 25 пробелов, а потом текст, в результате чего слева и справа от данной фразы окажется по 25 пробелов. Следовательно, необходимо иметь возможность передать величину "25" функции, печатающей пробелы. Мы применяем тот же способ, что и при передаче символа '*' функции putchar( ): используем аргумент. Тогда запись space(25) будет означать, что необходимо напечатать 25 пробелов. 25 - это аргумент. Мы будем вызывать функцию space( ) три раза: один раз для каждой строки адреса. Вот как выглядит эта программа:

/* титул фирменного бланка2 */

#define NAME "MEGATHINK, INC."

#define ADDRESS "10 Megabuck Plaza"

#define PLACE "Mcgapolis, CA 94904"

main( )

{

int spaces; 

starbar( );

space(25); /* space( ) использует в качестве аргумента константу*/

printf("%sn", NAME);

spaces = (65 - strlen(ADDRESS))/2;

/* мы заставляем программу вычислять, сколько пропустить пробелов */

space(spaces);  /* аргументом является переменная */

printf("%sn", ADDRESS);

space((65 - strlen(PLACE))/2); /* аргументом является выражение */

printf(" %s n", PLACE);

starbar( );

}

/* определение функции starbar( ) */

#include

#define LIMIT 65

starbar( )

{

int count;

for (count = 1;count <= LIMIT;count++) putchar('*');

putchar('n');

}

/* определение функции space( ) */

space(number)

int number; /* аргумент описывается перед фигурной скобкой */

{

int count /* дополнительная переменная описывается

                                                после фигурной скобки */

for (count = 1;count <= number;count++)

putchar(' ');

}

РИС. 9.3. Программа, печатающая титул фирменного бланка.

Обратите внимание на то, как мы экспериментировали при вы зовах функции space( ): мы задавали аргумент тремя различными способами. Являются ли все они работоспособными? Да - и вот доказательство.

********************************************************************* 

MEGATHINK, INC.

10 Megabuck Plaza

Megapolis, CA 94904

*********************************************************************

Рассмотрим сначала, как определить функцию с одним аргументом, после чего перейдем к вопросу о том, как она используется.

Оглавление книги


Генерация: 0.591. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз