Процедурное программирование на языке С. Часть 3. Файлы и структуры: Методические указания к лабораторным работам по курсам «Алгоритмические языки и программирование» и «Процедурное программирование», страница 12

fseek(try1,sm+2*2,SEEK_SET);   /* Установление позиции с номером sm+2*2 в качестве  текущей в файле  file-pos.txt*/

fread(s+m+2*2,1,2*(2*n-m-2),try1);    /* Из файла, связанного с указателем try1,  последовательно  считываются последние символы, их количество =  2*(2*n-m-2) */

for (i=m+2*2; i<n*2; i+=2)

       { printf ("s(%d)=%c%c\n",(int)(i/2)+1,*(s+i),*(s+i+1));

           *str=*(s+i);     *(str+1)=*(s+i+1);     *(str+2)='\0';  

            hs[(int)(i/2)]=atoi(str);

             sum_n+=hs[(int)(i/2)];         

          }

   printf("\nRESULT: summ of last  elements  sum_n = %d\n",sum_n);

  fprintf(tr,"%d\n",sum_l);

  itoa(sum_n,str,10);

  fputs( str,tr);

  free(hs);   free(s);   

  fclose(try1);       fclose(tr);

}

Замечание. Значение параметра offset может быть отрицательным. В этом случае перемещение указателя происходит от точки отсчета в направлении к началу соответствующего потока.

7.4. СТРУКТУРНЫЙ ТИП ДАННЫХ

Основное назначение структур – организация сложных данных. Группа связанных между собой по смыслу переменных (объектов), не обязательно одного типа может быть представлена не как множество отдельных элементов, а как единое целое – структура.

Классическим примером группы связанных между собой по смыслу данных  служит учетная карточка сотрудника предприятия, в которой содержатся, например, следующие сведения об одном сотруднике: табельный номер, ФИО, дата рождения, пол, адрес, зарплата. В свою очередь, некоторые из этих сведений могут иметь несколько компонент и тем самым представлять группы данных. Таковы, например, ФИО, дата рождения, адрес.

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

А для того, чтобы работать со структурой необходимо предварительно описать структуру, т.е. создать тип данных, соответствующий данной структуре, а именно всем ее компонентам.

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

Синонимы понятия компонента структуры:   элемент, член, поле.

В соответствии с синтаксисом языка С описание структуры (создание типа данных “структура” с именем <имя структуры>)  следующую форму (первый способ):

struct  <имя структуры>

шаблон                  {< спецификации типа > <идентификатор_1>:

структуры                        …

                       < спецификации типа > <идентификатор_N>;

                      }   ;

В качестве <спецификации типа> можно использовать любой базовый/производный, скалярный/агрегирующий тип данных. <идентификатор_1>, …, <идентификатор_N> –  имена элементов структуры.

Описание (определение) структуры создает шаблон, который можно использовать для создания объектов, т.е. экземпляров данной структуры.

Ввести структурный тип можно и с использованием ключевого слова typedef  в соответствии со следующей синтаксической формой (второй способ):

typedefstruct

       {< спецификации типа > <идентификатор_1>;  …

             < спецификации типа > <идентификатор_N>;

        }  <имя структуры> ;

Замечание. При создании типа данных struct <имя структуры> память не выделяется.

В примере 7.6 создается шаблон структуры с именем struct sotrudnik-1 (sotrudnik-2), предназначенной для хранения информации из  учетной карточки сотрудника, рассмотренной выше.

Пример 7.6.

Первый способ   struct sotrudnik_1

{ int  tab_number;   char fio[50];   char data[10];