Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Что такое комбинированный/составной тип данных? Способы описания (примеры). Способы обращения к компонентам структуры. Примеры.




Ответ:

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

Для работы со структурой необходимо решить следующие задачи:

· Разработать и объявить формат (компоновку) структуры;

· Объявить переменную (или переменные), соответствующую данной структуре;

· Обеспечить доступ к индивидуальным компонентам переменной типа структуры.

Объявление структуры

Объявление структуры – общее описание, показывающее из каких частей (членов, полей) состоит структура.

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

Объявление заканчивается точкой с запятой.При объявлении структуры память не выделяется.

Фактически объявление структуры определяет новый тип с именем структуры

struct addr { char name[30]; char street [40]; char city[20]; char state[3]; unsigned long int zip; };   // addr – метка структуры (структурный тип)   // память не выделяется

Создание переменной типа структуры

Для хранения данных необходимо выделить память.Выделение памяти происходит при объявлении переменной типа структуры.При объявлении типа структуры обязательно использование слова struct перед именем структуры (если не используется typedef).

struct addr

{

char name[30];

char street [40];

char city[20];

char state[3];

unsigned long int zip;

};     // памятьневыделяется

// памятьвыделяется

structaddraddr_info;

// памятьвыделяетсяподкаждуюпеременную

structaddrabook_city, abook_corp;

При объявлении структуры можно одновременно объявить одну или несколько переменных:

struct addr

{

char name[30];

char street[40];

char city[20];

char state[3];

unsigned long int zip;

}

addr_info, binfo, cinfo;

Допускается (не рекомендуется) объявление структуры без имени типа – только для однократного объявления переменных.

struct

{

char name[30];

char street[40];

char city[20];

char state[3];

unsigned long int zip;

}

addr_info;

Доступ к полям структуры

Доступ к полям структуры осуществляется с помощью оператора «.» :

имя_переменной.имя_члена

Где

имя_переменной – имя переменной типа структуры

  addr_info.zip = 12345;                  printf("%ld", addr_info.zip); gets(addr_infо.name);                                                for (t=0; addr_info.name[t]; ++t) putchar (addr_info.name[t]); // переменная addr_info имеет тип структуры addr // addr_info.zip имеет тип long int   // addr_info.name имеет тип char

Понятие файла. Общие функции для работы с файлами. Примеры.

Ответ:

Файлы это:

  • Файлы в обычном смысле: файлы, которые хранятся на жестком диске (можно считывать из них и запиcывать в них информацию);
  • Экран монитора: файл, в который можно выводить информацию (отобразится на экране монитора);
  • Клавиатура: файл, из которого можно считывать информацию;
  • Принтер: файл, в который можно выводить информацию (печать текста);
  • Модем: файл, из которого можно считывать информацию и в который можно записывать информацию (обмен информации по сети);

Файл - это всё, что предназначено для ввода или вывода информации.

При работе с файлами ввод/вывод данных через механизм потоков позволяет:

Организовывать доступ к файлу в режимах записи или чтения;

Выполнять ввод/вывод данных либо в виде последовательности символов (текстовый поток), либо в виде последовательности блоков данных заданного размера (бинарный, двоичный поток);

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

Прямой и последовательный доступ

Файловый указатель – связан с каждым файлом (потоком) в ОС и указывает на текущее местоположение в файле.

· Прямой (произвольный) доступ:

o Файловый указатель можно принудительно поставить на любую позицию (получить произвольный порядок чтения данных).

o Как правило, может быть осуществлен только для потоков - файлов.

· Последовательный доступ:

o В каждый момент времени доступна лишь одна компонента из всей последовательности данных.

o Чтобы обратиться к компоненте с номером К, необходимо просмотреть от начала файла К-1 предшествующих компонент.

o Процессы формирования (записи) компонент файла и просмотра (чтения) не могут произвольно чередоваться, файл вначале строится при помощи последовательного добавления компонент в конец, а затем может последовательно просматриваться от начала до конца.

o Используется для стандартных потоков (stderr, stdin, stdout).

o Практически всегда быстрее, чем прямой доступ.

Файловая переменная

У каждого потока, связанного с файлом, имеется управляющая структура (блок управления файлом), содержащая информацию о файле. Для ее хранения в программе используется переменная типа FILE:

FILE *fp;

Блок управления файлом содержит важную информацию о файле (не менять!):

· Местонахождение буфера.

· Характер доступа к файлу (чтение/запись).

· Указатель текущей позиции в файле.

· Наличие ошибок и состояния конца файла.

Поток связывается с файлом путем выполнения операции открытия файла

Связь между потоком и файлом разрывается при закрытии файла:

· В случае нормального завершения программы все файлы закрываются автоматически.

· В случае аварийного завершения программы файлы не закрываются.

Открытие и закрытие файла

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

FILE *fopen(char *name, char *mode);

Где

параметр name – имя файла,

Параметр mode задает тип доступа к файлу:

mode Действие Указатель при открытии устанавливается...
"r" Открытие существующего текстового файла для чтения. Если файл не существует или не может быть найден, функция fopen возвращает признак ошибки. ... в начало файла
"w" Открытие текстового файла для записи. Если файл существует, его содержимое уничтожается. Если файл не существует, он создаётся. ... в начало файла
"a" Открытие текстового файла для добавления. Если файл не существует, он создаётся. ... в конец файла  
"r+" Открытие текстового файла для модификации (чтения и записи). Файл должен существовать. ... в начало файла
"w+" Открытие пустого текстового файла для чтения и записи. Если файл существует, его содержимое уничтожается. ... в начало файла
"a+" Открытие текстового файла для чтения и добавления. Если файл не существует, он создаётся. ... в конец файла  

Модификаторы режима открытия файла:

mode Действие
“t” Работа с файлом в текстовом режиме (по умолчанию, можно не указывать)
“b” Работа с файлом в двоичном режиме

· В текстовом режиме:

o Файл рассматривается как последовательность символов, разбитых на строки при помощи разделительного символа ‘\n’ (Unix) или пары символов ‘\r’, ‘\n’ (Windows);

o При считывании разделительные символы заменяются на один символ переноса строки (‘\n’)

· В бинарном режиме:

o Точный побайтовый доступ к файлу.

o Никаких преобразований при чтении/записи не выполняется.

Открытие и закрытие файла

Закрытиефайла:

int fclose(FILE *file_ptr);

Если программа завершила работу нормально (return 0), то все файлы автоматически закрываются. В противном случае это не гарантируется (возможны проблемы при повторном запуске программы).

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

В случае ошибки функция fopen() возвращает NULL.

 

Числовой код ошибки – в глобальной системной переменной errno (<errno.h>).

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

. . .

int main()

{

FILE *f = fopen("filеnamе.txt", "rt");

if (f == NULL)

{

printf("Ошибкаоткрытияфайласкодом %d\n“, errno);

exit(1);

}

else

{

// работа с файлом

}     

fclose(f);

return 0;

}










Последнее изменение этой страницы: 2018-04-12; просмотров: 539.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...