Читаем Язык Си - руководство для начинающих полностью

printf(" Хорошо, %s, %s \n", name, MSG);

объединяет " Хорошо" с именем пользователя и c символьной строкой MSG в одну строку.

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

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

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

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

put1(string);

char *string;

{

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

putchar('\n');

}

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

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

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

put2 (string);

char *string;

{

int count = 0;

while(*string != '\0') {

putchar(* string++);

count++;

putchar('\n');

return(count);

}

Вызов:

put2(" пицца" );

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

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

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

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

#include

main( )

{

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

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

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

}

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

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

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

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

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

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

<p>ФУНКЦИИ, РАБОТАЮЩИЕ СО СТРОКАМИ</p>

     Большинство библиотек языка Си снабжено функциями, работающими со строками. Рассмотрим четыре наиболее полезных и распространенных: strlen( ), strcat( ), strcmp( ) и strcpy( ).

     Мы уже применяли функцию strlen( ), которая находит длину строки. Используем ее в нижеследующем примере функции, укорачивающей длинные строки.

<p>Функция strlen( )</p>

 /* Функция Прокруста */

fit(string, size)

char *string;

int size;

{

if(strlen(string) > size)

    *(string + size) = '\0';

}

Проверьте ее в "деле" в этой тестовой программе:

/* тест */

main( ) {

static char mesg[ ] = "Ну, теперь держитесь, компьютероманы.";

puts(mesg);

fit(mesg, 10);

puts(mesg);

}

Программа выдает:

Ну, теперь держитесь, компьютероманы.

Ну, теперь

     Наша функция помещает символ '\0' в одиннадцатый элемент массива, заменяя символ пробела. Остаток массива остается на старом месте, но puts( ) прекращает работу на первом нуль-символе и игнорирует остаток массива.

<p>Функция strcat( )</p>

Вот что умеет делать функция strcat( ):

/* объединение двух строк */

#include

< stdio.h>

main( )

{

static char flower [80];

static char addon[  ] = "ы пахнут старыми ботинками.";

puts(" Назовите ваш любимый цветок." );

gets(flower);

strcat (flower, addon);

puts(flower);

puts(addon);

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных