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

СОЗДАНИЕ СОБСТВЕННЫХ ФУНКЦИЙ

СОЗДАНИЕ СОБСТВЕННЫХ ФУНКЦИЙ

     Не ограничивайте себя при вводе и выводе только этими библиотечными функциями. Если у вас нет нужной функции, или она вам не нравится, можно создавать свои собственные версии, используя для этого getchar( ) и putchar( ).

Предположим, у вас нет функции puts( ). Вот один из путей ее создания:

/* put1  - печатает строку */

put1(string);

char *string;

{

while(*string != '') putchar(*string++);

putchar('n');

}

     Символьный указательstring вначале ссылается на первый элемент вызванного аргумента. После печати его содержимого указатель увеличивается и ссылается уже на следующий элемент. Это продолжается до тех пор, пока указатель не дойдет до элемента, содержащего нуль-символ. Затем в конце строки будет поставлен символ новой строки.

Предположим, у вас есть puts( ), но вам нужна функция, которая, кроме того, сообщает, сколько напечатано символов. Эту возможность легко добавить:

/* put2- - печатает строку и считывает символы */

put2 (string);

char *string;

{

int count = 0;

while(*string != '') {

putchar(* string++);

count++;

putchar('n');

return(count);

}

Вызов:

put2(" пицца" );

печатает строку пицца, в то время как оператор

num = puts(" пицца"); 

передаст, кроме того, количество символов в num; в данном случае это число 5. Вот несколько более сложный вариант, показывающий вложенные функции:

/* вложенные функции */

#include <stdio.h>

main( )

{

put1("Если бы я имел столько денег, сколько могу потратить,");

рrintf("Я считаю %d символа.n",

put2(" Я никогда бы нe жаловался, что приходится чинить старые стулья.");

}

(Мы включили в программу при помощи директивы #include файл stdio.h, потому что в нашей системе в нем определена функция putchar( ), а она используется в нашей новой функции.)

Да-а, мы используем функцию printf( ) для печати значения put2( ), но в процессе нахождения значения put2( ) компьютер должен сначала заставить ее поработать - напечатать строку. Вот что получается при этом:

Если бы я имел столько денег, сколько могу потратить,

Я никогда бы нe жаловался, что приходится чинить старые стулья.

Я считаю 63 символа.

     Теперь вы можете построить работающую версию функции gets( ); она должна быть похожа на нашу функцию getint( ) из гл. 10, но гораздо проще ее.

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


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