Как использовать 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*togs2.
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": | файл нужно записать | ||
| "а": | файл нужно дополнить |
Внимание: Если вы используете "w" для существующего файла, то старая версия его стирается, и ваша программа
начинает на "чистом месте".