Книга: Язык Си - руководство для начинающих
СОЗДАНИЕ СОБСТВЕННЫХ ФУНКЦИЙ
СОЗДАНИЕ СОБСТВЕННЫХ ФУНКЦИЙ
Не ограничивайте себя при вводе и выводе только этими библиотечными функциями. Если у вас нет нужной функции, или она вам не нравится, можно создавать свои собственные версии, используя для этого 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, но гораздо проще ее.
- Разработка ваших собственных UDF
- Создание собственных функций
- 8.1. Определение функций
- Создание файлов с блокировкой
- Создание свободно позиционируемых элементов
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Создание объектов Collection
- 7.4.2.4. Создание своего первого LiveCD
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 7.4.2. Создание собственного LiveCD
- Создание пользователя и группы на рабочей станции
- Создание корня документа: