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

Вторая важная особенность заключается в том, что мы используем заголовочный файл conio.h. Этот файл содержит директивы #define, которые заменяют обычные функции ввода-вывода [такие, как getchar( )] на версии "пультового ввода-вывода", являющиеся не буферизованными. И в результате, если вы нажимаете, скажем, клавишу [а], немедленно звучит нота, и вам нe нужно нажимать клавишу [ввод]. Между прочим, эти функции не только не выполняют эхо-печать, но и не начинают автоматически новую строку. Поэтому мы вставили оператор printf( ) для эхо-печати вводимой переменной tempo и использовали символы \n и \r для перемещения курсора на новую строку и возврата его к левой сторонe экрана. Если вы хотите, чтобы символы, которые соответствуют нажимаемым клавишам, отображались одновременно на экране, вставьте

putchar(key);

в программу.

Хотя ввод не буферизован, клавиатура имеет свой собственный буфер. Это позволяет вам, если вы хотите, заранее набирать все требуемые символы. А ноты будут звучать в собственном устойчивом темпе. Вот, пример, начало мелодии "Радость мира"

KjhGfdsA

Предоставляем вам возможность закончить эту мелодию.

<p>ПРИЛОЖЕНИЕ И. РАСШИРЕНИЕ ЯЗЫКА СИ</p>

 Версия 7 ОС UNIX предоставляет два важных расширения языка Си. Первое заключается в том, что можно использовать саму структуру (а нe только адрес или элемент структуры) в качестве аргумента функции. Второе расширение позволяет использовать новую форму данных, называемую "перечислимый тип данных". Теперь рассмотрим эти расширения.

<p>Структуры в качестве аргументов функции</p>

В не расширенном языке Си можно передавать функции адрес структуры. Например, если montana является структурной переменной структурного типа player, мы можем обратиться к функции следующим образом:

stats(&montana);

Функция stats( ) будет иметь примерно такой заголовок:

stat(name) struct player * name;

После вызова функции указатель name будет ссылаться на структуру montana и функция будет использовать montana в своих манипуляциях.

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

stats(montana);

Теперь функция stats( ) должна иметь несколько иной заголовок:

stats(name) struct player name;

На этот раз после вызова функции создается новая структурная переменная типа player. Новая переменная получает название name, и каждый элемент name имеет такое же значение, как и соответствующий элемент структуры montana.

Это расширение позволяет функции иметь свою "личную" копию структуры точно так же, как она обычно имеет свои копии стандартных переменных. Преимущество здесь то же, что и раньше: структуры не изменяются необъяснимо из-за непредвиденного побочного воздействия функции.

Будьте осторожны: Некоторые компиляторы допускают обращение вида

stats(montana);

но на самом деле интерпретируют его как

stats(&montana);

В этом случае передается адрес, и функция работает с самой исходной структурной переменной, а не с ее копией. 

<p>Перечислимые типы</p>

Ключевое слово enum позволяет создавать новый тип и определять значения, которые он может иметь. Приведем пример:

enum spectrum (red, orange, yellow, green, blue, violet);

enum spectrum color;

Первый оператор объявляет новый тип: spectrum. Он перечисляет также возможные значения переменных типа spectrum: red, orange и т. д. Они являются константами типа spectrum так же, как 4 является константой типа int, a 'g' - константой типа char.

Второй оператор объявляет color переменной типа spectrum. Вы можете присвоить переменной color любую константу типа spectrum; например:

color = green;

На первый взгляд типы enum могут показаться похожими на определенные пользователем порядковые типы языка Паскаль. Действительно, сходство есть, но есть и существенные различия, поэтому, если вы знаете Паскаль, то нс придете к такому заключению.

Рассмотрим характер этих новых констант и операций, которые можно выполнять с использованием переменных типа

enum константы

Как компьютер запоминает что-нибудь подобное red? Он может рассматривать это как символьную строку, но у нее нет кавычек. И действительно, red и другие enum константы запоминаются как целые числа. Например, попробуйте выполнить

printf("red = %d, orange = %d\n", red, orange);

и с учетом вышеуказанных описании вы получите такой результат:

red = 0, orange = 1

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

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

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

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

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

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

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

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

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