Стивен Прата - Язык Си - руководство для начинающих стр 34.

Шрифт
Фон

Как использовать typedef: typedef struct car CRATE;

ВОПРОСЫ И ОТВЕТЫ

Вопросы

structure {char itible;

int num [20];

char *togs;

};

2. Вот фрагмент программы; что она напечатает?

struct house {

float sqft;

int rooms;

int stories;

char *address; };

main ( ) {

static struct house fruzt = { 1560.0, 6, 1, " 22 Spiffo Road";

struct house *sign;

sign = &fruzt;

printf(" %d %d\n" , fruzt.rooms, sign-> stories);

printf(" %s\n", frurt.address);

prinlf(" %c %c \n" sign- >address[3], fruzt.address[4]);

}

3. Придумайте структурный шаблон, который будет содержать название месяца, трехбуквенную аббревиатуру месяца, количество дней в месяце и номер месяца.

4. Определите массив, состоящий из двенадцати структур того же типа, что и в вопросе 3, и инициализируйте его для не високосного года.

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

6. Взяв за основу нижеследующую функцию typedet, опишите 10-элементный массив указанной структуры. Затем, используя присваивание отдельного элемента попытайтесь описать третьим элементом массива линзу Ремаркатара с фокусным расстоянием 500 мм и апертурой f / 2.0.

typedef struct { /* описатель линзы */

float foclen; /* фокусное расстояние, мм */

float fstop; /* апертура */

char *brand; /* фирменная марка */ } LENS;

Ответы:

structstructure*togs

2.

6 1

22 Spiffo Road S p

Элемент fruzt.address является символьной строкой, а fruzt.address[4] является пятым элементом этого массива.

3.

struct month {

char name[10]; /* или char *name; */

char abbrev[4]; /* или char *abbrev; */

int days;

int monumb; };

4.

struct month months [12] = {

{" Январь" , " Янв" , 31, 1} , {" Февраль" , " Фев" , 28, 2} ,

и т. л. {"Декабрь", "Дек" , 31, 12}

5.

days(monlh);

inl month;

{

int index, tolal;

if(month < 1 || month > 12)

return (-1); /* признак ошибки */

else

for(index = 0, total = 0; index < month; index++)

total + = months [index].days;

return (total);}

Заметим, что index содержит номер месяца, уменьшенный на единицу, так как массивы начинаются с индекса 0; следовательно, мы используем выражение index < month вместо index bklist

то ваши диалоговые приглашения также будут переключены на bklist. И тогда не только нежелательная чепуха запишется в bklist, но и пользователь будет избавлен от вопросов, на которые он, как предполагалось, должен отвечать.

К счастью, язык Си предоставляет и более мощные методы связи с файлами. Один подход заключается в использовании функции fopen( ), которая открывает файл, затем применяются специальные функции ввода-вывода для

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

ЧТО ТАКОЕ ФАЙЛ?

struct _ iobuf

{

char *_ptr; /* текущий указатель буфера */

int_cnt; /* текущий счетчик байтов */

char*_base; /* базовый адрес буфера ввода-вывода*/

char_flag; /* управляющий признак */

char _ file; /* номер файла */

};

#define FILE struct_iobuf /* краткая запись */

Здесь мы не собираемся разбираться детально в этом определении. Главное состоит в том, что файл является структурой, и что краткое наименование шаблона файла - FILE. (Многие системы используют директиву typedef для установления этого соответствия.) Таким образом, программа, имеющая дело с файлами, будет использовать тип структуры FILE, чтобы делать так.

Имея это в виду, мы сможем лучше понять операции над файлами.

ПРОСТЫЕ ПРОГРАММЫ ЧТЕНИЯ ФАЙЛА: fopen( ), fclose( ), getc( ) и putc( )

/* расскажите, что находится в файле "test" */

#include

main( )

{

FILE *in; /* описываю указатель на файл */

int ch;

if((in = fopen("test", "r"))!=NULL)

/* открываю test для чтения, проверяя существует ли он */

/* указатель FILE ссылается теперь на test */

{

while((ch = getc(in) != EOF) /* получаю символ из in */

putc(ch, stdout); /* посылаю на стандартный вывод */

fclose(in); /* закрываю файл */ }

else

printf("я не смогла открыть файл \" test\" .\n");

}

Следует объяснить три основных момента: работу fopen( ), работу fclose( ) и использование функций ввода-вывода файла. Займемся ими.

Открытие файла: fopen( )

fopen( )fopen( );

Второй параметр [и второй аргумент fopen( )] описывает, как должен использоваться файл. Вот три основных применения файла:

"r":файл нужно считать
"w":файл нужно записать
"а":файл нужно дополнить
Некоторые системы предоставляют еще дополнительные возможности, но мы будем придерживаться этих. Заметим, что используемые нами коды являются строками, а нe символьными константами; следовательно, они заключаются в двойные кавычки. При применении "r" открывается существующий файл. При двух других применениях тоже будет открываться существующий файл, но если такого файла нет, он будет создан.

Внимание: Если вы используете "w" для существующего файла, то старая версия его стирается, и ваша программа

начинает на "чистом месте".

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке