/* ввод значения структурной переменной b2 типа BOOK*/
gets(b2.author);
gets (b2.name);
scanf(“%d%d”, &b2.year, &b2.pages);
struct ANKETA a2;
strcpy(a2.fio, “Иванов А.В.”);
а2.gr = 1980;
strcpy(a2.adr, “ул.Пушкина, д.10, кв.5”);
struct BOOK *p3 = &b3;
printf (“%s, %s, %d г., %d с.\n”, p3->author, p3->name,
p3->year, p3->pages);
Результат на экране:
Толстой Л.Н., Война и мир, 1995 г., 1650 с.
Если структурные переменные используются только в одной функции программы, то можно совместить описание переменных с описанием типа. При этом имя типа можно не задавать, например:
struct
{ char fio[20];
int gr;
char adr[40];
} a1, a2, *p1;
Память под структурную переменную может быть выделена динамически, при выполнении программы, например:
struct BOOK *p4;
p4 = (struct BOOK *) malloc (sizeof (struct BOOK));
Такая структура имени не имеет; обращаются к ней с помощью указателя p4, например:
gets (p4->name);
/* Программа определения числа дней, прошедших с начала года
до указанного месяца */
#include <stdio.h>
#include <string.h>
struct MONTH
{ char *name; /* название месяца */
int days; /* число дней */
};
int main()
{
struct MONTH year[12] =
{ {“январь”, 31},
{“февраль”, 28},
{“март”, 31},
…
{“декабрь”, 31}
};
char m[9]; /* название заданного месяца */
int n = 0; /* число дней до зад. месяца */
int i; /* индекс очер. эл-та массива year */
puts (“\nВведите название месяца”);
gets (m);
for (i=0; i<12 && strcmp (m, year[i].name)); i++)
n += year[i].days;
if (i==12) puts (“Неверное название”);
else printf (“Число прошедших дней: %d”, n );
return 0;
}
Файл – это поименованная область на диске, содержащая какую-либо информацию, например, текст программы, данные для программы, документ.
Файлы бывают текстовые и двоичные (бинарные). Текстовые файлы – это файлы, которые создаются или которые можно просмотреть с помощью текстовых редакторов. В операционной системе MS DOS текстовые файлы представляют собой последовательность символьных строк. Каждый символ занимает один байт. Строка заканчивается двумя символами: «возврат каретки» (с кодом 13) и «перевод строки» (с кодом 10).
Двоичные файлы содержат информацию во внутреннем представлении. Примером двоичного файла является exe-файл, содержащий программу в машинных командах. Прикладная программа тоже может создать двоичный файл, записав в него данные в том виде, в каком они хранятся в памяти (к примеру, типа int).
При работе с файлами программа на языке Си должна вначале открыть каждый файл с помощью функции fopen(). При этом для каждого файла создается структура типа FILE, содержащая всю необходимую информацию о файле. Тип такой структуры с именем FILE определен в файле stdio.h. В программе необходимо для каждого файла описать указатель на структуру типа FILE и присвоить ему значение, возвращаемое функцией fopen().
Для чтения информации из файла служат функции:
fscanf() – форматированный ввод,
fgets() – чтение одной строки,
fgetc() – чтение одного символа,
fread() – ввод заданного числа байтов (символов).
Для записи информации в файл используются функции:
fprintf() – форматированный вывод,
fputs() – вывод строки,
fputc() – вывод одного символа,
fwrite() – вывод заданного числа байтов (символов).
Обычно к файлу применяется последовательный доступ: чтение из файла и запись в файл происходят последовательно, например, в цикле по одной строке либо блоками байтов. При этом указатель текущей позиции файла каждый раз автоматически сдвигается на начало следующей строки или следующего блока. Однако возможен и прямой (произвольный) доступ к файлу. Он используется, когда файл состоит из записей одинаковой (фиксированной) длины. Для прямого доступа к файлу служит функция fseek(). Она устанавливает указатель текущей позиции файла в указанное место.
После завершения работы с файлом его следует закрыть с помощью функции fclose().