Если при открытии потока возникла ошибка диск заполнен при записи то указательный поток приобретает

int
2. Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …

информация из него не стирается, можно выполнять запись в конец файла
3. …-это процесс уменьшения значения переменной

инкрементация
4. В языке C++ рекомендуется первоначально использовать при написании программ …

цифры и буквы (строчные и прописные)
5. Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f- это …

начало отсчета
6. Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …

Тип ответа: Одиночный выбор
сегментом данных (статический сегмент) и доступны постоянно на протяжении всей работы программы

сегментом данных (статический сегмент) и доступны только во время работы функции, в которой они описаны

стеком и доступны постоянно на протяжении всей работы программы
7. Идентификаторы — это …

Тип ответа: Одиночный выбор
высказывания, относительно которых можно сказать истинно оно или ложно

имена переменной константы, процедур, функций и т. д.

атомарная часть C++ программы, которой можно поставить в соответствие предложение естественного языка
8. B C++ тип данных bool — это …

тип с плавающей запятой наименьшего размера
9. B C++ циклическая алгоритмическая управляющая структура с параметром записывается как …

Тип ответа: Одиночный выбор
двумерный массив всегда подвергается изменению сразу весь, целиком

нельзя подвергать изменению целиком весь массив сразу
11. Директива #include включает в программу содержимое указанного файла, имя которого может быть указано двумя способами, в частности: …

12. Описание формальных параметров алгоритма функции происходит …

Тип ответа: Одиночный выбор
только два раза

неограниченное количество раз

только один раз
13. Квадратные матрицы — это такие матрицы, у которых …

Тип ответа: Одиночный выбор
все элементы матрицы равны нулю

число элементов в строке равно числу элементов в столбце, т. е. M = N

число элементов в строке/столбце зависит от того, в каком столбце/строке оно содержится

не все ячейки заполнены элементами
14. Чтобы текст программы в C++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …

Тип ответа: Множественный выбор
разделять слова символом подчеркивания (firs_index)

писать каждое следующее слово с большой буквы (FirstIndex)

писать через пробел (first index)

писать слитно строчными буквами (firstindex)
15. Имена формальных и фактических параметров …

Тип ответа: Одиночный выбор
не могут совпадать

могут совпадать, но это отразится на выполнении программы

могут совпадать и это не отразится на выполнении программы, но может привести к проблемам при понимании алгоритма работы
16. В C++ оператор … высвобождает выделенную память
delete

&

new
17. К основным типам языка в C++ относится … — тип с плавающей запятой, повышенной точности

Тип ответа: Одиночный выбор
char

bool

double

_wchar_t

float

int
18. Если произвести единичный циклический сдвиг элементов массива вправо, то …

Тип ответа: Одиночный выбор
будет происходить перемещение содержимого последней ячейки в первую

будет происходить перемещение содержимого первой ячейки в последнюю

будет создана дополнительная ячейка
19. Файл — это …

Тип ответа: Одиночный выбор
именованная область на внешнем информационном носителе (диске), содержащая данные

перенос данных

специальное место на компьютерном носителе информации
20. Идентификаторы, описанные в функции, являются локальными для нее, если …

Тип ответа: Одиночный выбор
работа с ними возможна только внутри этой функции и внутри вложенных в нее блоков

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

они могут быть использованы в исполнительной части самого модуля
21. Файл, связанный с потоком, в режиме открытия, а открывается для …

Тип ответа: Одиночный выбор
чтения

записи

добавления

чтения и записи (но это не точно)
22. Параметры-переменные используются для передачи … значений функций

Тип ответа: Одиночный выбор
выходных

входных

входных и выходных
23. Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …

Тип ответа: Одиночный выбор
инкрементацией

конкатенацией

инициализацией

итерацией
24. Для того чтобы в программе описать переменную типа одномерный массив, нужно записать:…

Тип ответа: Одиночный выбор
<тип> <имя_массива>[<инициализатор>]

массива

<индекс> <имя_массива>
25. Директивы препроцессора начинаются со знака который должен быть самым первым символом строки

Тип ответа: Одиночный выбор
«амперсанд» (&)

«правый слеш» («/»)

«диез» (#)

«плюс» (+)
26. Функция обработки строковых данных islower(c) возвращает значение true, если с является …, и false в других случаях

Тип ответа: Одиночный выбор
буквой нижнего регистра

буквой верхнего регистра

буквой или цифрой

цифрой

пробелом
27. Начало однострочного комментария в C++ обозначается комбинацией …

Тип ответа: Одиночный выбор
«//»

«#»

«*/»

«?»

«&»
28. Функция обработки строковых данных strcat (s1, s2)…

Тип ответа: Одиночный выбор
выполняет побайтное копирование п символов из строки s2 в строку s1. возвращает значения s1

сравнивает строку s1 со строкой s2 и возвращает результат типа ɪnt: 0 — если строки эквивалентны, >0 — если s1 < s2, <0 — если s1 > s2

определяет длину указанной строки, без учета нуль-символа

объединяет строку s2 со строкой s1, результат сохраняется в s1
29. Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …

Тип ответа: Одиночный выбор
числа

латинские буквы

символы
30. Идентификаторы могут состоять …

Тип ответа: Одиночный выбор
только из арифметических знаков +, *, /

как из цифр, так и из специальных символов #, $, Л, &

только из букв латиницы, цифр и символа «_»
31. B C++ все файлы … последовательность байтов

Тип ответа: Одиночный выбор
могут рассматриваться или как структурированная, или как неструктурированная

рассматриваются как структурированная

рассматриваются как неструктурированная
32. Диапазон типа данных float-…

Тип ответа: Одиночный выбор
1 байт

2 байта

4 байта

8 батов
33. B C++ циклическая алгоритмическая управляющая структура с постусловием записывается как

Тип ответа: Одиночный выбор
while

for

do

34. Говоря об одномерных массивах, можно утверждать, что …

Тип ответа: Множественный выбор
массив — переменная сложной структуры и потому не может быть подвергнута обработке целиком

массив может быть подвергнут обработке целиком

все действия с массивами следует проводить поэлементно, т.е. обращаясь непосредственно к каждой его ячейке
35. Прямым проходом следует пользоваться при реализации …

Тип ответа: Одиночный выбор
циклического сдвига вправо

циклического сдвига влево

как циклического сдвига вправо, так и циклического сдвига влево
36. Говоря об алгоритмах подсчета суммы и произведения элементов массива, можно утверждать, что накопление суммы начинают с…

Тип ответа: Одиночный выбор
нуля, а произведения — с единицы

единицы, а произведения — с нуля

нуля, как и произведения

единицы, как и произведения
37. В языке C++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …

Тип ответа: Одиночный выбор
«/*» — начало комментария и «*/» — конец комментария

«*/»- начало комментария и «/*» — конец комментария

«//»- начало комментария и «//» — конец комментария

«#»- начало комментария и «/*» — конец комментария
38. Если доступ к элементам многомерных массивов осуществляется с помощью индексированных переменных а[1] [1], то доступ к этому же элементу с помощью указателей будет …

Тип ответа: Одиночный выбор
*(*(a+1)+1)

a[1,1]

a|1||1|

*(a+1)+1

a[1::1]
39. Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …

Тип ответа: Одиночный выбор
auto

extern

static

register
40. Локальные данные записываются в область памяти, называемую …

Тип ответа: Одиночный выбор
сегментом данных (статический сегмент) и доступны постоянно на протяжении всей работы программы

стеком и доступны только во время работы функции, в которой они описаны

сегментом данных (статический сегмент) и доступны только во время работы функции, в которой они описаны

стеком и доступны постоянно на протяжении всей работы программы
41. Выходные параметры — это …

Тип ответа: Одиночный выбор
текущие данные для функции

результат работы функции

исходные данные для функции

набор данных, в обработке которых и заключается предназначение алгоритма

параметры, переданные по ссылке без права их изменения
42. Изменить режим работы с файлом …

Тип ответа: Одиночный выбор
можно только после закрытия файла

невозможно

можно только во время работы с файлом
43. Разреженные матрицы — это такие матрицы, у которых …

Тип ответа: Одиночный выбор
все элементы матрицы равны нулю

число элементов в строке равно числу элементов в столбце, т. е. M = N

число элементов в строке/столбце зависит от того, в каком столбце/строке оно содержится

не все ячейки заполнены элементами
44. … массив — это одномерный массив, каждым элементом которого является свои одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца
Двумерный массив

45. Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …

Тип ответа: введите ответ
указателя.

  1. В С++ все файлы … последовательность байтов

Все файлы рассматриваются как не структурированная последовательность байтов

  1. В С++ имя функции, возвращающей не-void, … от операции присваивания

Всегда имя функции ставится справа от операции присваивания.

  1. В С++ каждый индекс пишется в …

в С++ каждый индекс пишется в собственных квадратных скобках.

  1. В С++ класс памяти определяет … переменной

Класс памяти определяет время жизни и область видимости переменной.

  1. В С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …

произойдет неявное преобразование типов данных.

  1. В С++ оператор … выделяет память из области свободной памяти

Операция new выделяет память из области свободной памяти,

  1. В С++ оператор … высвобождает выделенную память

а операция delete высвобождает выделенную память.

  1. В С++ тип данных категории void …

Типом void описывается пустой набор значений. Задание переменных типа void невозможно. Этот тип служит в основном для объявления функций, не возвращающих значения, или универсальных указателей на нетипизированные или произвольно типизированные данные.

  1. В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …

While

  1. Для доступа к компонентам файла …

используется указатель, в отличие от индекса в массиве

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

Const

  1. Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …

&

//

#

Const

  1. Вопрос: Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …

Тип ответа: Одиночный выбор
элемент

элемент либо индекс строки (в зависимости от условия задачи)

индекс строки или столбца (в зависимости от условия задачи)

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

двойное двоеточие

  1. Если нужно скопировать элементы массива B в массив A, …

Пусть, например, нужно скопировать элементы массива B в массив A. Самый простой, как покажется, следующий способ: просто взять и присвоить один массив другому, т. е. A=B.

  1. Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …

При открытии потока могут возникать следующие ошибки:

— файл, связанный с потоком не найден (при чтении из файла);

— диск заполнен (при записи); 209

— диск защищен от записи (при записи) и т. п.

В этих случаях указатель на поток приобретет значение NULL (0).

  1. Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …

Тип ответа: введите ответ
Векторами

  1. есть процесс записи значений переменных на каждом шаге работы программы

Трассировка

  1. Имена переменных констант, процедур, функций и т. д. называются …

идентификаторами

компиляторами

операторами

типами данных

  1. К унарным операциям относят …

Бинарными называют операции, для выполнения которых необходимо два операнда, унарными – один

  1. Операции new и delete …, так как выделяемая память после ее использования должна высвобождаться

в С++ операции new и delete предназначены для динамического распределения памяти компьютера. Операция new выделяет память из области свободной памяти, а операция delete высвобождает выделенную память. Выделяемая память, после её использования должна высвобождаться, поэтому операции new и delete используются парами. Даже если не высвобождать память явно, то она освободится ресурсами ОС по завершению работы программы. Однако, если такое выделение памяти происходит многократно в процессе работы программы, это может привести к заполнению всей свободной оперативной памяти, поэтому необходимо очищать не используемую память.

  1. Описание переменной может быть выполнено …

или как объявление, или как определение.

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

Динамическая память

  1. параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определении

Формальные параметры

  1. Параметры-константы – это параметры, …

Параметры константы – параметры, переданные по ссылке без права их изменения.

  1. Переменные класса памяти register аналогичны …, но память под них выделяется в регистрах процессора

auto

  1. Процесс задания некоторой переменной первичного значения называется …

Тип ответа: введите ответ
инициализацией.

  1. Согласно правилам описания перегруженных функций, …

Правила описания перегруженных функций:

1) Перегруженные функции должны находиться в одной области видимости.

2) Перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях должны совпадать.

3) В разных вариантах перегруженных функций может быть разное количество умалчиваемых параметров.

4) Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или наличием ссылки.

  1. Сопоставьте знаки унарных операций в С++ и описания операций:

  1. Укажите пример объявления указателя:

  1. Укажите пример правильного синтаксиса цикла for :

  1. … – это массив, элементами которого служат массивы

Тип ответа: введите ответ
матрица

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

1

ПОТОКОВЫЙ ВВОД-ВЫВОД

На уровне потокового ввода-вывода обмен данными производится побайтно. Такой ввод-вывод возможен как для собственно устройств побайтового обмена (печатающее устройство, дисплей), так и для файлов на диске, хотя устройства внешней памяти, строго говоря, являются устройствами поблочного обмена, т.е. за одно обращение к устройству производится считывание или запись фиксированной порции данных. Чаще всего минимальной порцией данных, участвующей в обмене с внешней памятью, являются блоки в 512 байт или 1024 байта. При вводе с диска (при чтении из файла) данные помещаются в буфер операционной системы, а затем побайтно или определенными порциями передаются программе пользователя. При выводе данных в файл они накапливаются в буфере, а при заполнении буфера записываются в виде единого блока на диск за одно обращение к последнему. Буферы операционной системы реализуются в виде участков основной памяти. Поэтому пересылки между буферами ввода-вывода и выполняемой программой происходят достаточно быстро в отличие от реальных обменов с физическими устройствами.

Функции библиотеки ввода-вывода языка Си, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод и вывод. Таким образом, поток — это файл вместе с предоставляемыми средствами буферизации.

При работе с потоком можно производить следующие действия.

открывать и закрывать потоки (связывать указатели на потоки с конкретными файлами);

вводить и выводить: символ, строку, форматированные данные, порцию данных произвольной длины;

анализировать ошибки потокового ввода-вывода и условие достижения конца потока (конца файла);

управлять буферизацией потока и размером буфера;

получать и устанавливать указатель (индикатор) текущей позиции в потоке.

Для того чтобы можно было использовать функции библиотеки ввода-вывода языка Си, в программу необходимо включить заголовочный файл stdio.h (#include <stdio.h>), который содержит прототипы функций вводавывода, а также определения констант, типов и структур, необходимых для работы функций обмена с потоком.

Открытие и закрытие потока

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

При открытии потока в программу возвращается указатель на поток, являющийся указателем на объект структурного типа FILE. Этот указатель идентифицирует поток во всех последующих операциях.

Указатель на поток, например fp, должен быть объявлен в программе следующим образом:

#include <stdio.h> FILE *fp;

Указатель на поток приобретает значение в результате выполнения функции открытия потока:

fp = fopen (имя_файлата, режим_отêрытия);

Параметры имя_файла è режим_открытия являются указателями на массивы символов, содержащих соответственно имя файла, связанного с потоком, и строку режимов открытия. Однако эти параметры могут задаваться и непосредственно в виде строк при вызове функции открытия файла:

fp = fopen(«t.txt», «r»);

где t. txt — имя некоторого файла, связанного с потоком;

r — обозначение одного из режимов работы с файлом (тип доступа к потоку).

Стандартно файл, связанный с потоком, можно открыть в одном из следующих шести режимов:

«w»

новый текстовый (см. ниже) файл открывается для записи. Если файл уже существовал, то предыдущее

содержимое стирается, файл создается заново;

«r»

существующий текстовый файл открывается только для чтения;

«à»

текстовый файл открывается (или создается, если файла нет) для добавления в него новой порции инфор-

мации (добавление в конец файла). В отличие от режима «w» режим «а» позволяет открывать уже сущест-

вующий файл, не уничтожая его предыдущей версии, и писать в продолжение файла;

«w+»

новый текстовый файл открывается для записи и последующих многократных исправлений. Если файл уже

существует, то предыдущее содержимое стирается. Последующие после открытия файла запись и чтение из

него допустимы в любом месте файла, в том числе запись разрешена и в конец файла, т.е. файл может уве-

личиваться («расти»);

«r+»

существующий текстовый файл открывается как для чтения, так и для записи в любом месте файла; однако

в этом режиме невозможна запись в конец файла, т.е. недопустимо увеличение размеров файла;

«à+»

текстовый файл открывается или создается (если файла нет) и становится доступным для изменений, т.е.

для записи и для чтения в любом месте; при этом в отличие от режима «w+» можно открыть существующий

файл и не уничтожать его содержимого; в отличие от режима «r+» в режиме «а+» можно вести запись в ко-

нец файла, т.е. увеличивать его размеры.

Поток можно открыть в текстовом либо двоичном (бинарном) режиме.

В текстовом режиме прочитанная из потока комбинация символов CR (значение 13) и LF (значение 10), то есть управляющие коды «возврат каретки» и «перевод строки», преобразуется в один символ новой строки ‘n’ (значение 10, совпадающее с LF). При записи в поток в текстовом режиме осуществляется обратное преобразование, т.е. символ новой строки ‘n’ (LF) заменяется последовательностью CR и LF.

Если файл, связанный с потоком, хранит не текстовую, а произвольную двоичную информацию, то указанные преобразования не нужны и могут быть даже вредными. Обмен без такого преобразования выполняется при выборе двоичного или бинарного режима, который обозначается буквой b. Например, «r+b» или «wb». В некоторых компиляторах текстовый режим обмена обозначается буквой t, т.е. записывают «a+t» или «rt».

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

2

Если поток открыт для изменений, т.е. в параметре режима присутствует символ «+», то разрешены как вывод в поток, так и чтение из него. Однако смена режима (переход от записи к чтению и обратно) должна происходить только после установки Указателя потока в нужную позицию.

При открытии потока могут возникнуть следующие ошибки: указанный файл, связанный с потоком, не найден (для режима «чтение»); диск заполнен или диск защищен от записи и т.п. Необходимо также отметить, что при выполнении функции fopen() происходит выделение динамической памяти. При ее отсутствии устанавливается признак ошибки «Not enough memory» (недостаточно памяти). В перечисленных случаях указатель на поток приобретает значение NULL. Заметим, что указатель на поток в любом режиме, отличном от аварийного, никогда не бывает равным NULL.

Приведем типичную последовательность операторов, которая используется при открытии файла, связанного с потоком:

if ((fp = fopen(«t.txt», «w»))== NULL) { perror(«ошибêа при отêрытии файла t.txt n»); exit(O); }

ãäå NULL — нулевой указатель, определенный в файле stdio.h.

Для вывода на экран дисплея сообщения об ошибке при открытии потока используется стандартная библиотечная функция perror(), прототип которой в stdio.h имеет вид:

void perror (const char * s);

Функция perror() выводит строку символов, адресуемую указателем s, за которой размещаются: двоеточие, пробел и сообщение об ошибке. Содержимое и формат сообщения определяются реализацией системы программирования. Текст сообщения об ошибке выбирается функцией perror() на основании номера ошибки. Номер ошибки заносится в переменную int errno (определенную в заголовочном файле errno.h) рядом функций библиотеки языка Си, в том числе и функциями ввода-вывода.

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

Открытые на диске файлы после окончания работы с ними рекомендуется закрыть явно. Для этого используется библиотечная функция

int fclose (óêазатель_на_потоê);

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

Иногда, перед критическими операциями имеет смысл сбросить данные, хранящиеся в буферах обмена потоков на диск. Для этого предназначены функции принудительной записи данных из буфера (прототипы хранятся в <stdio.h>:

int fflush(óêазатель_на_потоê); — записывает информаццию хранящуюся в буфере в файл, поток при этом не закрывается. Возвращает 0 в случае успеха и EOF если ошибка. Не работает с небуферизированными потоками. fflush(stdin) – очистить входной поток.

int flushall(void); — записывает информаццию хранящуюся в буферах обмена открытых потоков в соответствующие им файлы. Потоки после этой операции остаются открытыми. Возвращает число открытых потоков ввода/вывода.

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

void setbuf(FILE *stream, char *buf) — устанавливает буферизацию потока

int setvbuf(FILE *stream, char *buf, int type, size_t size) — назначает буферизацию потока

Стандартные потоки

Когда программа начинает выполняться, автоматически открываются пять потоков, из которых основными являются:

стандартный поток ввода (на него ссылаются, используя предопределенный указатель на поток stdin);

стандартный поток вывода (stdout);

стандартный поток вывода сообщений об ошибках (stderr).

По умолчанию стандартному потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout è stderr соответствует экран дисплея.

Для ввода-вывода данных с помощью стандартных потоков в библиотеке языка Си определены следующие функции:

getchar( )/putchar() — ввод-вывод отдельного символа;

gets( )/puts() — ввод-вывод строки;

scanf( )/printf() — ввод-вывод в режиме форматирования данных.

Ввод-вывод отдельных символов в стандартные потоки.

Ввод-вывод одного символа осуществляется с помощью библиотечных функций getchar() и putchar(). Прототи-

пы функций: int getchar(void); int putchar(int с);

Функция getchar() осуществляет ввод одного символа. При обращении она возвращает в вызвавшую ее функцию один введенный символ.

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

Функция getchar( ) вводит очередной байт информации (символ) в виде значения типа int ,что гарантирует успешность распознавания ситуации «достигнут конец файла». Если при чтении из файла с помощью функции getchar() может быть достигнут конец файла. В этом случае операционная система в ответ на попытку чтения символа передает функции getchar() значение EOF (End of File). Константа EOF определена в заголовочном файле stdio.h и в разных операционных системах имеет значение 0 или -1.

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

В случае ошибки при вводе функция getchar() также возвращает EOF.

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

3

Функции getchar() считывает очередной байт информации из стандартного ввода лишь в том случае, если буфер операционной системы окажется пустым. Если буфер не пуст, то в программу пользователя будет передан оче- редной символ из буфера.

При наборе текста на клавиатуре коды символов записываются во внутренний буфер операционной системы. Одновременно они отображаются на экране дисплея. Набранные на клавиатуре символы можно редактировать (удалять и набирать новые). Фактический перенос символов из внутреннего буфера в программу происходит при нажатии клавиши <Enter>. При этом код клавиши <Enter> также заносится во внутренний буфер. Таким образом, при нажатии на клавишу ‘А’ и клавишу <Enter> (завершение ввода) во внутреннем буфере оказываются: код символа ‘А’ и код клавиши <Enter>. Это необходимо учитывать при вводе функцией getchar() одиночного символа.

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

#include <stdio.h>

int main() {

printf(«a»);

getchar();

/* #1 */

printf(«b») ;

getchar();

/* #2 */

printf(«c»);

return 0; }

Сначала на экран выводится символ ‘а’, и работа программы приостанавливается до ввода очередного (в данном случае — любого) символа. Если, как это делается обычно, нажать, например, клавишу <q> и затем клавишу <Enter> (для завершения ввода), то на следующей строке появятся символы bc, и программа завершит свою работу. Первая (в программе) функция getchar() (#1) прочитала из внутреннего буфера код символа ‘q’, и следующая за ней функция printf() вывела на экран символ ‘q’. Остановки работы программы не произошло, потому что вторая функция getchar() (#2) прочитала код клавиши <Enter> из внутреннего буфера, а не очередной символ с клавиатуры. Произошло это потому, что к моменту вызова функции getchar() внутренний буфер не был пуст.

Приведенная программа будет работать правильно, если в момент остановки программы нажимать только клавишу <Enter>.

Функция putchar( ) служит для вывода на устройство стандартного вывода одного символа, заданного в каче- стве параметра. Ниже приведены примеры задания выводимого символа:

int c ;

c = getchar(); putchar(c); putchar{‘A’); putchar(’07’); putchar(‘t’);

В строке 2 фрагмента программы на экран дисплея выводится символ, введенный в предыдущей строке функцией getchar( ). В строке 3 выводится символ ‘А’, в строке 4 выводится управляющий символ, заданный кодом 007 (звуковой сигнал). В последней строке выводится неотображаемый (управляющий) символ табуляции, перемещающий курсор в следующую позицию табуляции. Обычно эти позиции задаются следующим числовым рядом: 1,9,17,25…

Приведем в качестве примера применения функций getchar() è putchar( ) программу копирования данных из стандартного ввода в стандартный вывод, которую можно найти практически в любом пособии по программированию на Си:

#include <stdio.h> int main() { int c;

while {(c = getchar()) != EOF) putchar(c); return 0; }

Для завершения приведенной выше программы копирования необходимо ввести с клавиатуры сигнал прерывания Ctrl+C (одновременно нажать клавиши <Ctrl> и <С>).

Ввод-вывод строк в стандартные потоки

В библиотеку Си для обмена данными через стандартные потоки ввода-вывода включены функции вводавывода строк gets() è puts(), прототипы которых имеют следующий вид:

char * gets (char * s);

/*

Фóнêция

ввода */

int puts (char * s);

/*

Фóнêция

вывода */

Обе функции имеют только один аргумент — указатель s на массив символов. Если строка прочитана удачно, функция gets() возвращает адрес того массива s, в который производился ввод строки. Если произошла ошибка, то возвращается NULL.

Функция puts() в случае успешного завершения возвращает последний выведенный символ, который всегда является символом ‘n’. Если произошла ошибка, то возвращается EOF.

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

#include <stdio.h>

char strl[ ] = «Введите фамилию сотрóдниêа:»; int main() {

char name[80]; puts(strl); gets(name); return 0; }

Напомним, что любая строка символов в языке Си должна заканчиваться нуль-символом ». В последний элемент массива strl нуль-символ будет записан автоматически во время трансляции при инициализации массива. Для функции puts( ) наличие нуль-символа в конце строки является обязательным. В противном случае, т.е. при отсутствии в символьном массиве символа », программа может завершиться аварийно, так как функция puts() в поисках нуль-символа будет перебирать всю доступную память байт за байтом, начиная в нашем примере с адреса strl. Об этом необходимо помнить, если в программе происходит формирование строки для вывода ее на экран дисплея. Функция gets() завершает свою работу при вводе символа ‘n’, который автоматически передается от клавиатуры в ЭВМ при нажатии на клавишу <Enter>. При этом сам символ ‘n’ во вводимую строку не записывается. Вместо него

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

4

в строку помещается нуль-символ ». Таким образом, функция gets() производит ввод «правильной» строки, а не просто последовательности символов.

Здесь следует обратить внимание на следующую особенность ввода данных с клавиатуры. Функция gets( ) на- чинает обработку информации от клавиатуры только после нажатия клавиши <Enter>. Таким образом, она «ожидает», пока не будет набрана нужная информация и нажата клавиша <Enter>. Только после этого начинается ввод данных в программу.

В приведенную выше программу вкралась неявная ошибка: Длина строки на которую ссылается указатель name = 80 символов (последний – »). Если длина вводимой строки будет превышать 80 символов, то строка «выйдет» за пределы, выделенные для нее памяти и испортит участок памяти следующий далее. Это приведет к непредсказуемым последствиям. Избежать этого можно используя функцию fgets() (прототип: char *fgets(char *s, int n, FILE *stream). Например: fgets( strl, 80 stdin ); fgets( strl, strlen(strl)+1, stdin ); или в данном примере вводимая строка усекается до 79 символов и к ней добавляется 80й -» ( в случае если вводимая строка превышает 79 символов).

РАБОТА С ФАЙЛАМИ НА ДИСКЕ

Аналогичным образом (так же как это делается при работе со стандартными потоками ввода-вывода stdin è stdout) можно осуществлять работу с файлами на диске. Для этой цели в библиотеку языка Си включены следующие функции:

fgetc(), getc() — ввод (чтение) одного символа из файла; fputc(), putc() — запись одного символа в файл; fprintf() — форматированный вывод в файл;

fscanf() — форматированный ввод (чтение) из файла; fgets() — ввод (чтение) строки из файла;

fputs() — запись строки в файл;

fwrite() — пересылает в файл заданное число байт, начиная с указанного адреса памяти; fread() пересылает заданное число байт из файла в массив в памяти.

Как было указано выше – поток (файл) можно открыть в текстовом либо двоичном (бинарном) режиме. В текстовом режиме прочитанная из потока комбинация символов CR (значение 13) и LF (значение 10), то есть управляющие коды «возврат каретки» и «перевод строки», преобразуется в один символ новой строки ‘n’ (значение 10, совпадающее с LF). При записи в поток в текстовом режиме осуществляется обратное преобразование, т.е. символ новой строки ‘n’ (LF) заменяется последовательностью CR и LF. Обычно в текстовом режиме с файлом работают функциями fprintf(), fscanf(), fgets(), fputs(), fgetc(), fputc(). В двоичном режиме применяют fgetc(), fputc(), fwrite(), fread().

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

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

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

Двоичный режим обмена с файлами.

Двоичный (побайтный) режим обмена организуется с помощью функций getc( ) è putc(), обращение к которым имеет следующий формат:

с= getc(fp); putc(c, fp);

где fp — указатель на поток;

с — переменная типа int для приема очередного символа из файла или для записи ее значения в файл. Прототипы функции:

int getc (FILE * stream );

int putc (int c, FILE *stream );

Программа ввода читает символы с клавиатуры и записывает их в файл. Пусть признаком завершения ввода служит поступивший от клавиатуры символ ‘0’. Имя файла запрашивается у пользователя. Если при вводе последовательности символов была нажата клавиша <Enter>, служащая разделителем строк при вводе с клавиатуры, то в файл записываются управляющие коды «Возврат каретки» (CR — значение 13) и «Перевод строки» (LF — значение 10). Код CR в дальнейшем при выводе вызывает перевод маркера (курсора) в начало строки экрана дисплея. Код LF служит для перевода маркера на новую строку дисплея. Значения этих кодов в тексте программы обозначены соответственно идентификаторами CR и LF, т.е. CR и LF — именованные константы. Запись управляющих кодов CR и LF в файл позволяет при последующем выводе файла на экран отделить строки друг от друга или читать построчно функцией fgets().

В приводимых ниже программах используются уже рассмотренные выше функции getchar(), putchar() для посимвольного обмена со стандартными потоками stdin, stdout.

#include <stdio.h> /* Проãрамма ввода символов */ int main() {

FILE *fp; /* Уêазатель на потоê */ char с;

const char CR=’13’; const char LF = ’10’;

char fname[20];

/* Массив для имени файла */

puts(«Введите имя файла: n»); gets(fname); /* Запрос имени файла: */

if ((fp = fopen(fname,»w»)) = NULL)

/* Отêрыть

файл для Записи: */

{ perror(fname); return 1; }

while

((c = getchar()) != ‘0’) { /*

Циêл ввода

и записи в файл символов: */

if

(с == ‘n’){putc(CR, fp); putc(LF, fp);}

else putc(c,

fp); }

fclose(fp); /*

Циêл ввода завершен;

заêрыть файл: */

return 0; }

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

5

return 0; }

Следующая программа читает поток символов из ранее созданного файла и выводит его на экран дисплея:

#include <stdio.h> int main() {

FILE *fp; /* Уêазатель на потоê */ char с;

char fname[20]; /* Массив для имени файла */ puts(«введите имя файла: n «); gets(fname);

if ((fp = fopen(fname,»r»)) = = NULL) /* Отêрыть файл для чтения: */ { perror(fname); return 1; }

while ((c = getc(fp)) != EOF) /* Циêл чтения из файла и вывода символов на эêран: */ putchar{c);

fclose(fp);

Строковый обмен с файлами.

Для работы с текстовыми файлами, кроме перечисленных выше, удобно использовать функции fgets() è fputs(). Прототипы этих функций в файле stdio.h имеют следующий вид:

int fputs(const char *s, FILE *stream); char * fgets(char *s, int n, FILE *stream);

Функция fputs() записывает ограниченную символом » строку (на которую указывает s) в файл, определенный указателем stream на поток, и возвращает неотрицательное целое. При ошибках функция возвращает EOF. Символ » в файл не переносится, и символ ‘n’ не записывается в конце строки вместо ».

Функция fgets() читает из определенного указателем stream файла не более (n-1) символов и записывает их в строку, на которую указывает s. Функция прекращает чтение, как только прочтет (n-1) символов или встретит символ новой строки ‘n’, который переносится в строку s. Дополнительно в конец каждой строки записывается признак окончания строки ». В случае успешного завершения функция возвращает указатель s. При ошибке или при достижении конца файла, при условии, что из файла не прочитан ни один символ, возвращается значение NULL. В этом случае содержимое массива, который адресуется указателем s, остается без изменений. Напомним, что в отли- чие от fgets() функция gets() отбрасывает символ ‘n’.

Пример программы, которая переписывает текст из одного файла в другой. Предположим что мы хотим с ее помощью переписать содержимое файла f1.dat в файл f2.txt.

#include <stdio.h> main(){

char cc[256];/* Массив для обмена с файлами */ FILE *f1, *f2; /* Уêазатели на потоêи */

if ((f1 = fopen(«f1.dat», «r»)) == NULL) { perror(«f1.datn»); return 1; } if ((f2 = fopen(«f2.dat», «w»)) == NULL) { perror(«f2.datn»); return 1; } while (fgets(cc, 256, f1) != NULL)

fputs(cc, f2);

fclose(f1); fclose(f2); return 0; }

Если входной файл не существует или нет места на диске для создания выходного файла, то выдаются соответствующие сообщения:

Ошибêа при отêрытии файла f1.dat

èëè

Ошибêа при отêрытии файла f2.txt

Режим форматного обмена с файлами.

Если необходимо записывать информацию в файл в виде, пригодном для непосредственного отображения на экран дисплея, т.е. в символьном виде. То в этом случае можно воспользоваться функциями форматного ввода (вывода) в файл fprintf() è fscanf(), которые имеют следующие прототипы:

int fprintf (óêазатель_на_потоê, форматная-строêа, списоê-переменных);

int fscanf (óêазатель_на_потоê, форматная_строêа, списоê_адресов_переменных);

Как и в функциях printf() è scanf(), форматная строка может быть определена вне вызова функции, а в каче- стве фактического параметра в этом случае будет указатель на нее.

От рассмотренных выше функций printf(), scanf() для форматного обмена с дисплеем и клавиатурой функции fprintf() è fscanf( ) отличаются лишь тем, что в качестве первого параметра в них необходимо задавать указатель на поток, с которым производится обмен. В качестве примера приведем программу, создающую файл int.dat и записывающую в него символьные изображения чисел от 1 до 10 и их квадратов:

#include <stdio.h> int main() {

FILE *fp; /* Уêазатель на потоê */ int n;

if ((fp = fopen(«int.dat»,»w»)) == NULL) { perror(«int.dat») ; return 1; }

for (n=1;

n<11;

n++) fprintf(fp, «%d

%dn», n,

n*n);

fclose(fp);

return

0; }

Программа,форматного чтения данных из файла:

#include <stdio.h> int main() {

FILE *fp; /* Уêазатель на потоê */ int n, nn, i;

if ((fp = fopen(«int.dat»,»r»)) == NULL) { perror(«int.dat») ; return 1; } while (!feof(fp))

{ fscanf(fp,’ «%d %d», &n, &nn); printf(» %d %d n»,n, nn); } fclose(fp); return 0; }

Строка while (!feof(fp)) использует функцию feof, чтобы определить, установлен ли индикатор конца файла, на который ссылается fp. Индикатор конца файла сообщает программе, что чтение данных закончено( если пользователь вводит данные с клавиатуры, то индикатор конца файла для стандартного ввода устанавливается, когда пользователь вводит соответствующую комбинацию клавиш). Аргумент, передаваемый функции feof, — указа-

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

6

тель на файл, для которого необходимо проверить индикатор конца файла. Функция возвращает ненулевое значе- ние, (true), если индикатор конца файла установлен, в противном случае возвращается нуль. В данной программе цикл while, включающий в себя вызов feof, будет продолжать выполняться, пока не будет установлен индикатор конца файла.

1.Комбинации клавиш для конца файла в различных популярных системах

Компьютерные системы

Комбинация клавиш

UNIX

<return> <ctrl>d

IBM PC и совместимые

<ctrl>z

Macintosh

<ctrl>d

VAX(VMS)

<ctrl>z

Позиционирование в потоке.

Рассмотреные выше — посимвольный, построчный и форматный обмены с файлами, организованными в виде потока байтов Эти средства позволяли записать в файл данные и читать из него информацию только последовательно.

Операция чтения (или записи) для потока всегда производится, начиная с текущей позиции в потоке. Начальная позиция чтения/записи в потоке устанавливается при открытии потока и может соответствовать начальному или конечному байту потока в зависимости от режима открытия потока. При открытии потока в режимах «r» и «w» указатель текущей позиции чтения/записи в потоке устанавливается на начальный байт потока, а при открытии в режиме «а» — в конец файла (за конечным байтом) При выполнении каждой операции ввода-вывода указатель текущей позиции в потоке перемещается на новую текущую позицию в соответствии с числом прочитанных (записанных) байтов.

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

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

int fseek (óêазателъ_на_потоê, смещение, начало_отсчета);

Смещение задается переменной или выражением типа long и может быть отрицательным, т.е. возможно перемещение по файлу в прямом и обратном направлениях. Начало отсчета задается одной из предопределенных констант, размещенных в заголовочном файле stdio.h:

SEEK_SET (имеет значение 0) — начало файла;

SEEK_CUR (имеет значение 1) — теêóщая позиция; SEEK_END (имеет значение 2) — êонец файла.

Функция fseek() возвращает 0, если перемещение в потоке (файле) выполнено успешно, в противном случае возвращается ненулевое значение.

Приведем примеры использования функции fseek(). Перемещение к началу потока (файла) из произвольной позиции: fseek(fp, 0L, SEEK_SET);

Перемещение к концу потока (файла) из произвольной позиции: fseek(fp, 0L, SEEK_END); В обоих примерах смещение задано явно в виде нулевой десятичной константы 0L типа long.

При использовании сложных типов данных (таких, как структура) можно перемещаться в потоке (файле) на то количество байтов, которое занимает этот тип данных. Пусть, например, определена структура: struct str {..}

st;

Тогда следующее обращение к функции fseek() переводит указатель текущей позиции в потоке на одну структуру вперед относительно текущей позиции: fseek(fp, (long)Sizeof(st), SEEK_CUR);

Кроме рассмотренной функции fseek(), в библиотеке функций языка Си находятся следующие функции для работы с указателями текущей позиции в потоке:

long ftell(FILE *) — получить значение указателя текущей позиции в потоке;

void rewind(FILE *) — установить указатель текущей позиции в потоке на начало потока.

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

Файлы произвольного доступа

Рассмотрим некоторые функции и приемы, применяемые к файлам произвольного доступа.

Функция fwrite() пересылает в файл заданное число байт, начиная с указанного адреса памяти. Данные записываются с того места в файле, которое обозначено указателем позиции файла. Функция fread() пересылает заданное число байт из места в файле, определенного указателем позиции файла, в массив в памяти, начинающийся с указанного адреса. Теперь при записи целого числа вместо оператора

fprintf (fPtr, «%d», number);

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

fwrite(&number, sizeof(int), 1, fPtr);

который всегда записывает четыре байта (или два байта для систем с двухбайтовым целым) из переменной number в файл, определяемый fPtr. В дальнейшем, вызвав fread, можно прочитать эти четыре байта в переменную number. Õîòÿ fread è fwrite считывают и записывают данные, такие как целые числа, в формате с фиксированным, а не переменным, размером, данные, с которыми они оперируют, обрабатываются в форме “сырых данных” (то есть в виде байтов), а не в привычном для человека века формате, с которым оперируют printf è scanf.

Функции fwrite è fread дают возможность чтения и записи массивов данных с диска и на диск. Третий аргумент как в fread, òàê è â fwrite — это число элементов массива, которые необходимо считать с диска или записать на диск. Представленный выше вызов функции fwrite записывает на диск одно целое поэтому третий аргумент равен 1 (как если бы записывался один элемент массива).

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

7

Программы обработки файлов редко записывают в файл единственное поле. Обычно они записывают за один раз переменную типа struct.

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

Размер одной записи, обычно, вычисляется оператором sizeof(struct type), в случае если все записи имеют фиксированную длину и не содержат ссылок.

Вычислить число записей в файле можно, используя следующий прием – вычисляем объем файла в байтах и делим его на размер одной записи:

while(1) {

fgetc(cfPtr);

/* cfPtr – óêазатель на потоê связанный с файлом */

if(feof(cfPtr)) break; /* если данные исчерпаны – то выход */

j++; }

/* переменная-счетчиê для подсчета размера файла */

Таêже, можно подсчитать объем сразó в записях:

while(1) {

if (fread(&its, sizeof(student), 1, cfPtr) ==

NULL) break;

j++; } /* , ãде its – стрóêтóра типа student

*/

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

while(1) {

if (fread(&its, sizeof(student), 1, cfPtr) == NULL) break; { /* обработêа записей */ } }

Для перехода к произвольной записи можно использовать оператор fseek. Например:

fseek(cfPtr, (Num -1) * sizeof(student), SEEK_SET);

Этот оператор устанавливает указатель позиции файла, на который ссылается cfPtr на байт, определяемый выражением (Num-1) * sizeof(struct student); (значение этого выражения называется смещением), т.е. перед записью с номером Num, которую мы хотим обрабатывать. Таким образом, для первой записи указатель позиции файла устанавливается на байт 0 файла.

Рассмотрим пример:

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

Для удобства разобьем программу на несколько функций: Create_File – создает файл, заданного размера;

Udate_stud – позволяет обновлять данные указанных записей; Print_stud – считывает данные с диска и выводит на печать.

#include <stdio.h> #include <stdlib.h> #include <conio.h>

void Create_File(char *, int); void Udate_stud(char *, int); void Print_stud(char *);

typedef struct { int number; char name[15];

char surname[15];

long n_book; } student;

main () {

char *fn=»stud.dat»;

int kol_stud=5; /* первоначальное êоличество стóдентов */ clrscr();

Create_File( fn, kol_stud); /* создаем файл из пóстых записей */

Udate_stud(fn, kol_stud); /* редаêтирóем сóществóющие записи или добавляем новые*/ Print_stud(fn); /* распечатываем данные из файла */

return 0; }

/* Последовательное создание файла с произвольным достóпом */ void Create_File(char *name, int kol) {

int i;

student its

= { 0,»»,»»,0};

FILE *cfPtr;

if ((cfPtr =

fopen(name, «w»)) == NULL) perror(name);

else {

for (i = 1; i <= kol; i++)

fwrite(&its, sizeof(student), 1, cfPtr); fclose(cfPtr); }

}

void Udate_stud(char *name, int kol) { FILE *cfPtr;

student its;

if ((cfPtr = fopen(name, «r+»)) == NULL) perror(name); else {

printf(«Введите номер стóдента (1 to %d, 0 — заêончить ввод)?n», kol); scanf(«%d», &its.number);

while (its.number !=0) {

printf(«Введите имя, Фамилию, номер зачетêи ?n»); scanf(«%s%s %ld», &its.name, &its.surname, &its.n_book);

Лысый Д.А. Основы программирования. Ввод, вывод, потоки, файлы. часть2

8

fseek(cfPtr, (its.number-1)*sizeof(student), SEEK_SET);

fwrite(&its, sizeof(student), 1, cfPtr);

printf(«Введите номер стóдента ?n «);

scanf(«%d», &its.number);

}

}

fclose (cfPtr);

}

void Print_stud(char *name) {

FILE *cfPtr;

student

its;

int n,j=0;

if ((cfPtr = fopen(name, «r»)) == NULL) perror(name);

printf(«

Списоê стóдентов ãрóппы?n»);

while (1)) {

if (fread(&its, sizeof(student), 1, cfPtr) == NULL) break; if (its.number !=0)

printf(«%5d%17s%17s%10ldn»,its.number, its.name, its.surname, its.n_book);

}

fclose (cfPtr);

}

Контрольная работа: Открытие и закрытие потока

Прежде, чем начать работать с потоком, его надо инициировать, т. е. открыть. При этом поток связывается со структурой предопределенного типа FILE, определение которой находится в файле <stdio.h>. В структуре находится указатель на буфер, указатель на текущую позицию и т. п. При открытии потока возвращается указатель на поток, т. е. на объект типа FILE. Указатель на поток должен быть объявлен следующим образом:

#include <stdio.h>

……. .

FILE*f;//указатель на поток

Указатель на поток приобретает значение в результате выполнения функции открытия потока:

FILE* fopen(const char*filename,const char*mode);

где const char*filename – строка, которая содержит имя файла, связанного с потоком,

const char*mode – строка режимов открытия файла.

Например:

f=fopen(“t.txt”,”r”);

где t.txt – имя файла, r – режим открытия файла.

Файл связанный с потоком можно открыть в одном из 6 режимов

Режим Описание режима открытия файла
r Файл открывается для чтения, если файл не существует, то выдается ошибка при исполнении программы.
w Файл открывается для записи, если файл не существует, то он будет создан, если файл уже существует, то вся информация из него стирается.
a Файл открывается для добавления, если фай не существует, то он будет создан, если существует, то информация из него не стирается, можно выполнять запись в конец файла
r+ Файл открывается для чтения и записи, изменить размер файла нельзя, если файл не существует, то выдается ошибка при исполнении программы.
w+ Файл открывается для чтения и записи, если файл не существует, то он будет создан, если файл уже существует, то вся информация из него стирается.
a+ Файл открывается для чтения и записи, если фай не существует, то он будет создан, если существует, то информация из него не стирается, можно выполнять запись в конец файла

Поток можно открывать в текстовом (t) или двоичном режиме(b). В текстовом режиме поток рассматривается как совокупность строк, в конце каждой строки находится управляющий символ ‘n’. В двоичном режиме поток рассматривается как набор двоичной информации. Текстовый режим устанавливается по умолчанию.

В файле stdio.h определена константа EOF, которая сообщает об окончании файла (отрицательное целое число).

При открытии потока могут возникать следующие ошибки:

— файл, связанный с потоком не найден (при чтении из файла);

— диск заполнен (при записи);

— диск защищен от записи (при записи) и т. п.

В этих случаях указатель на поток приобретет значение NULL (0). Указатель на поток, отличный от аварийного не равен 0.

Для вывода об ошибке при открытии потока используется стандартная библиотечная функция из файла <stdio.h>

void perror (const char*s);

Эта функция выводит строку символов, не которую указывает указатель s, за этой строкой размещается двоеточие пробел и сообщение об ошибке. Текст сообщения выбирается на основании номера ошибки. Номер ошибки заносится в переменную int errno(определена в заголовочном файле errno.h).

После того как файл открыт, в него можно записывать информацию или считывать информацию, в зависимости от режима.

Открытые файлы после окончания работы рекомендуется закрыть явно. Для этого используется функция:

int fclose(FILE*f);

Изменить режим работы с файлом можно только после закрытия файла.

Пример:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

void main()

{

FILE *f;

char filename[20];

cout<<”nEnter the name of file:”; cin>>filename;

if(f=fopen(filename,”rb”)==0)//открываем для чтения в бинарном режиме и проверяем

// возникает ли ошибка при открытии файла

{

perror(strcat“error in file :”,filename);//strcat складывает две строки

exit(0);//выход из программы

}

…. .

fclose(f);

}

Для текстового файла:

if(f=fopen(filename,”rt”)==0)//открываем для чтения и проверяем возникает ли ошибка при //открытии файла

if(f=fopen(filename,”r”)==0)//открываем для чтения и проверяем возникает ли ошибка при //открытии файла

  1. … – это массив, элементами которого служат массивы
  2. … есть процесс записи значений переменных на каждом шаге работы программы
  3. … массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца
  4. … параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определении
  5. В С++ все файлы … последовательность байтов
  6. В С++ класс памяти определяет … переменной
  7. В С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …
  8. В С++ тип данных категории void …
  9. В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …
  10. В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …
  11. В языке С++ …
  12. В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …
  13. В языке С++ рекомендуется первоначально использовать при написании программ …
  14. В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …
  15. Выходные параметры – это …
  16. Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …
  17. Говоря об одномерных массивах, можно утверждать, что …
  18. Диапазон типа данных float — …
  19. Для доступа к компонентам файла …
  20. Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …
  21. Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …
  22. Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …
  23. Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …
  24. Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)
  25. Если нужно скопировать элементы массива B в массив A, …
  26. Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …
  27. Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …
  28. Если произвести единичный циклический сдвиг элементов массива вправо, то …
  29. Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …
  30. Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …
  31. Идентификаторы – это …
  32. Изменить режим работы с файлом …
  33. Имена переменных констант, процедур, функций и т. д. называются …
  34. Имена формальных и фактических параметров …
  35. К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размера
  36. К основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точности
  37. К унарным операциям относят …
  38. Локальные данные записываются в область памяти, называемую …
  39. Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …
  40. Начало однострочного комментария в С++ обозначается комбинацией …
  41. Операции new и delete …, так как выделяемая память после ее использования должна высвобождаться
  42. Описание переменной может быть выполнено …
  43. Параметры-константы – это параметры, …
  44. Параметры-переменные используются для передачи … значений функций
  45. Переменные класса памяти register аналогичны …, но память под них выделяется в регистрах процессора
  46. Перемещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …
  47. Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …
  48. Разреженные матрицы – это такие матрицы, у которых …
  49. Согласно правилам описания перегруженных функций, …
  50. Сопоставьте знаки унарных операций в С++ и описания операций:
  51. Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …
  52. Файл – это …
  53. Функция обработки строковых данных strcat (s1, s2) …
  54. Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято …

     
          Описание
          Ответы на 54 вопроса 
          Оглавление
          … – это массив, элементами которого служат массивы … есть процесс записи значений переменных на каждом шаге работы программы… массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца… параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определенииВ С++ все файлы … последовательность байтовВ С++ класс памяти определяет … переменнойВ С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …В С++ тип данных категории void …В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …В языке С++ …В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …В языке С++ рекомендуется первоначально использовать при написании программ …В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …Выходные параметры – это …Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …Говоря об одномерных массивах, можно утверждать, что …Диапазон типа данных float  - …Для доступа к компонентам файла …Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)Если нужно скопировать элементы массива B в массив A, …Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …Если произвести единичный циклический сдвиг элементов массива вправо, то …Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …Идентификаторы – это …Изменить режим работы с файлом …Имена переменных констант, процедур, функций и т. д. называются …Имена формальных и фактических параметров …К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размераК основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точностиК унарным операциям относят …Локальные данные записываются в область памяти, называемую …Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …Начало однострочного комментария в С++ обозначается комбинацией …Операции new и delete …, так как выделяемая память после ее использования должна высвобождатьсяОписание переменной может быть выполнено …Параметры-константы – это параметры, …Параметры-переменные используются для передачи … значений функцийПеременные класса памяти register аналогичны …, но память под них выделяется в регистрах процессораПеремещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …Разреженные матрицы – это такие матрицы, у которых …Согласно правилам описания перегруженных функций, …Сопоставьте знаки унарных операций в С++ и описания операций:Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …Файл – это …Функция обработки строковых данных strcat (s1, s2) …Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято … 
            
            
            Основы программирования мобильных игр (тест с ответами Синергия/МОИ/ МТИ /МОСАП)✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022Основы программирования на С++ ответы синергия 2022Основы программирования на языке PythonОсновы программирования на языке Python / Основы Python (ответы на тест Синергия / МТИ / МОИ / МосАП)Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)Основы программирования (практические задания, вариант 4)Основы предпринимательстваОсновы предпринимательства✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)Основы предпринимательства. Вариант 9. НГУЭУ.ОСновы предпринимательства синергияОсновы предпринимательства Тест с ответами Синергия 2022 год

     
          Описание
          Ответы на 54 вопроса 
          Оглавление
          … – это массив, элементами которого служат массивы … есть процесс записи значений переменных на каждом шаге работы программы… массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца… параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определенииВ С++ все файлы … последовательность байтовВ С++ класс памяти определяет … переменнойВ С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …В С++ тип данных категории void …В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …В языке С++ …В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …В языке С++ рекомендуется первоначально использовать при написании программ …В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …Выходные параметры – это …Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …Говоря об одномерных массивах, можно утверждать, что …Диапазон типа данных float  - …Для доступа к компонентам файла …Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)Если нужно скопировать элементы массива B в массив A, …Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …Если произвести единичный циклический сдвиг элементов массива вправо, то …Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …Идентификаторы – это …Изменить режим работы с файлом …Имена переменных констант, процедур, функций и т. д. называются …Имена формальных и фактических параметров …К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размераК основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точностиК унарным операциям относят …Локальные данные записываются в область памяти, называемую …Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …Начало однострочного комментария в С++ обозначается комбинацией …Операции new и delete …, так как выделяемая память после ее использования должна высвобождатьсяОписание переменной может быть выполнено …Параметры-константы – это параметры, …Параметры-переменные используются для передачи … значений функцийПеременные класса памяти register аналогичны …, но память под них выделяется в регистрах процессораПеремещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …Разреженные матрицы – это такие матрицы, у которых …Согласно правилам описания перегруженных функций, …Сопоставьте знаки унарных операций в С++ и описания операций:Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …Файл – это …Функция обработки строковых данных strcat (s1, s2) …Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято … 
            
            
            Основы программирования мобильных игр (тест с ответами Синергия/МОИ/ МТИ /МОСАП)✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022Основы программирования на С++ ответы синергия 2022Основы программирования на языке PythonОсновы программирования на языке Python / Основы Python (ответы на тест Синергия / МТИ / МОИ / МосАП)Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)Основы программирования (практические задания, вариант 4)Основы предпринимательстваОсновы предпринимательства✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)Основы предпринимательства. Вариант 9. НГУЭУ.ОСновы предпринимательства синергияОсновы предпринимательства Тест с ответами Синергия 2022 год

  • Основы программирования мобильных игр (тест с ответами Синергия/МОИ/ МТИ /МОСАП)
  • ✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022
  • Основы программирования на С++ ответы синергия 2022
  • Основы программирования на языке Python
  • Основы программирования на языке Python / Основы Python (ответы на тест Синергия / МТИ / МОИ / МосАП)
  • Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)
  • Основы программирования (практические задания, вариант 4)
  • Основы предпринимательства
  • Основы предпринимательства
  • ✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022
  • 💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)
  • Основы предпринимательства. Вариант 9. НГУЭУ.
  • ОСновы предпринимательства синергия
  • Основы предпринимательства Тест с ответами Синергия 2022 год

     
          Описание
          Ответы на 54 вопроса 
          Оглавление
          … – это массив, элементами которого служат массивы … есть процесс записи значений переменных на каждом шаге работы программы… массив – это одномерный массив, каждым элементом которого является свой одномерный массив, или, иначе говоря, это такой тип данных, элементы которого однотипны и каждый из них характеризуется уникальной парой чисел: индексом строки и индексом столбца… параметры – это локальные переменные, необходимые для описания алгоритма функции, они описываются в ее заголовке и используются в ее определенииВ С++ все файлы … последовательность байтовВ С++ класс памяти определяет … переменнойВ С++ компилятор может работать с переменными разных типов, т.е. если присвоить целочисленной переменной значение вещественной переменной, то будет присвоена только целая часть и …В С++ тип данных категории void …В С++ циклическая алгоритмическая управляющая структура с параметром записывается как …В С++ циклическая алгоритмическая управляющая структура с постусловием записывается как …В языке С++ …В языке С++ блок комментариев (условный вид блоков программ) выделяется сочетанием символов …В языке С++ рекомендуется первоначально использовать при написании программ …В C++ циклическая алгоритмическая управляющая структура с предусловием записывается как …Выходные параметры – это …Говоря о порядке обращения к элементам двумерного массива, можно утверждать, что …Говоря об одномерных массивах, можно утверждать, что …Диапазон типа данных float  - …Для доступа к компонентам файла …Для использования способа передачи входных данных, являющихся сложными структурированными переменными, в списке формальных параметров перед параметром-константой ставится префикс …Для использования способа передачи выходных значений функций, в списке формальных параметров перед параметром-переменной ставится префикс …Для обработки элементов двумерного массива, на строки которого накладываются некоторые условия, требуется при просмотре этого массива внутрь циклов ставить условие на …Для создания переменных, которые доступны во всех файлах программы, используется класс памяти …Если возникает потребность в обращении к переменной при коллизии имен, то следует вначале указать название модуля (модуль основной программы), а далее через … – имя переменной (или иной идентификатор, к которому нужно обратиться)Если нужно скопировать элементы массива B в массив A, …Если объявление глобальных переменных происходит в основной программе, то во время ее работы значения глобальных переменных записываются в область памяти, называемую …Если при открытии потока возникла ошибка – диск заполнен (при записи), то указатель на поток приобретет …Если произвести единичный циклический сдвиг элементов массива вправо, то …Если связанный с потоком файл, который открывается в режиме открытия w+, уже существует, то …Если элементами одномерного массива является простой числовой тип данных, то такие массивы называют …Идентификаторы – это …Изменить режим работы с файлом …Имена переменных констант, процедур, функций и т. д. называются …Имена формальных и фактических параметров …К основным типам данных языка в С++ относится … – тип с плавающей запятой наименьшего размераК основным типам языка в С++ относится … – тип с плавающей запятой, повышенной точностиК унарным операциям относят …Локальные данные записываются в область памяти, называемую …Наиболее естественными объектами, которые принято хранить в двумерных массивах, являются …Начало однострочного комментария в С++ обозначается комбинацией …Операции new и delete …, так как выделяемая память после ее использования должна высвобождатьсяОписание переменной может быть выполнено …Параметры-константы – это параметры, …Параметры-переменные используются для передачи … значений функцийПеременные класса памяти register аналогичны …, но память под них выделяется в регистрах процессораПеремещение указателя на произвольную файловую позицию происходит с помощью функции fseek, которая записывается как int fseek(FILE *f, long off, int org); где FILE *f – это …Под произвольным доступом к компонентам файла понимается работа с файлом с возможностью произвольного перемещения …Разреженные матрицы – это такие матрицы, у которых …Согласно правилам описания перегруженных функций, …Сопоставьте знаки унарных операций в С++ и описания операций:Строковые данные можно складывать друг с другом (например, при сложении строк «Hello», и «world!» получится строка «Hello, world!»), и такая операция над строками будет называться …Файл – это …Функция обработки строковых данных strcat (s1, s2) …Чтобы текст программы в С++ был более понятным, рекомендуется придерживаться общепринятых соглашений об именах объектов, в частности, если имя состоит из нескольких слов (например, first index), принято … 
            
            
            Основы программирования мобильных игр (тест с ответами Синергия/МОИ/ МТИ /МОСАП)✅ Основы программирования на С++ 54 вопроса СИНЕРГИЯ МТИ 2022Основы программирования на С++ ответы синергия 2022Основы программирования на языке PythonОсновы программирования на языке Python / Основы Python (ответы на тест Синергия / МТИ / МОИ / МосАП)Основы программирования на языке Python.ти (тест с ответами МОИ/ МТИ)Основы программирования (практические задания, вариант 4)Основы предпринимательстваОсновы предпринимательства✅ Основы предпринимательства 34 вопроса СИНЕРГИЯ МТИ 2022💯 Основы предпринимательства [4 темы] (все ответы на тест Синергия / МТИ / МосАП, сентябрь 2022)Основы предпринимательства. Вариант 9. НГУЭУ.ОСновы предпринимательства синергияОсновы предпринимательства Тест с ответами Синергия 2022 год

Обновлено: 21.06.2023

Вы можете делать снимки (называемые скриншотами) или записывать экран на своем Mac с помощью снимков экрана или сочетаний клавиш. Снимок экрана предоставляет панель инструментов, которые позволяют легко делать снимки экрана и записывать снимки экрана, с параметрами для управления тем, что вы снимаете, например, вы можете установить задержку таймера или включить указатель или щелчки.

Создание снимков или запись экрана с помощью функции «Снимок экрана»

На Mac нажмите Shift-Command-5 (или используйте Launchpad), чтобы открыть снимок экрана и отобразить инструменты.

Нажмите на инструмент, чтобы выбрать, что вы хотите захватить или записать (или использовать сенсорную панель).

Для части экрана перетащите рамку, чтобы изменить ее положение, или перетащите ее края, чтобы настроить размер области, которую вы хотите захватить или записать.

Захват всего экрана

Захват окна

Захват части экрана

Записать весь экран

Записать часть экрана

Нажмите «Параметры», если хотите.

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

Функция «Показать плавающую миниатюру» упрощает работу с завершенным снимком или записью: она отображается в правом нижнем углу экрана на несколько секунд, поэтому у вас есть время перетащить ее в документ, пометить, или поделитесь им до того, как оно будет сохранено в указанном вами месте.

Начать скриншот или запись экрана:

Для всего экрана или его части: нажмите «Захват».

Для окна: наведите указатель мыши на окно, затем щелкните окно.

Для записей нажмите «Запись». Чтобы остановить запись, нажмите кнопку «Остановить запись» в строке меню.

Если установлен параметр «Показать плавающую миниатюру», вы можете выполнять любое из следующих действий, пока миниатюра ненадолго отображается в правом нижнем углу экрана:

Проведите вправо, чтобы немедленно сохранить файл и скрыть его.

Перетащите миниатюру в документ, электронное письмо, заметку или окно Finder.

Нажмите на миниатюру, чтобы открыть окно, в котором вы можете пометить снимок экрана, обрезать запись или поделиться ею.

В зависимости от того, где вы выбрали сохранение снимка экрана или записи, может открыться приложение.

Создание снимков с помощью сочетаний клавиш

Для съемки экрана на Mac можно использовать различные сочетания клавиш. Файлы сохраняются на рабочем столе.

Совет. Чтобы скопировать снимок экрана и вставить его куда-нибудь, например в электронное письмо или на другое устройство, нажмите и удерживайте клавишу Control, одновременно нажимая другие клавиши. Например, чтобы скопировать весь экран, нажмите Shift-Command-Control-3.

Захват всего экрана

Захват части экрана

Нажмите Shift-Command-4, затем переместите указатель перекрестия туда, где вы хотите начать снимок экрана. Нажмите кнопку мыши или трекпада, перетащите область, которую хотите захватить, затем отпустите кнопку мыши или трекпада.

Захват окна или строки меню

Нажмите Shift-Command-4, затем нажмите пробел. Наведите указатель камеры на окно или строку меню, чтобы выделить его, затем нажмите.

Захват меню и пунктов меню

Откройте меню, нажмите Shift-Command-4, затем перетащите указатель на элементы меню, которые вы хотите захватить.

Нажмите Shift-Command 5.

Захват сенсорной панели

Эти сочетания клавиш можно настроить на панели «Сочетания клавиш» в настройках клавиатуры. На Mac выберите меню Apple

> Системные настройки, нажмите «Клавиатура» , затем нажмите «Сочетания клавиш».

Снимки экрана сохраняются в виде файлов .jpg, а записи экрана — в файлах .mov. Имена файлов начинаются с «Снимок экрана» или «Запись экрана» и включают дату и время.

Возможно, вы не сможете фотографировать окна в некоторых приложениях, таких как DVD-плеер.

 советы по записи экрана

Запись экрана — это эффективный способ поделиться любой информацией, которая есть на вашем экране, со зрителями.

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

Посмотрите видео, прочитайте пост или сделайте и то, и другое! В любом случае, вы будете на пути к созданию более качественных видеозаписей с экрана.

1. Вы можете записывать что угодно на своем экране

Одним из преимуществ записи экрана является то, что если вы видите его, вы можете его и заснять. Подойдет все: презентации PowerPoint, электронные таблицы, веб-страницы и все остальное, что появляется.

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

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

Пример грязного рабочего стола с загроможденными значками рядом с чистым рабочим столом без значков

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

2. Составьте план того, что вы собираетесь сказать

Во время записи легко путаться. Вместо этого составьте план.

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

Мэтт Пирс из TechSmith говорит в свою веб-камеру со словом

Без сценария или какого-либо общего направления легко сделать запись слишком многословной.

 Пример сценария записи экрана, включающего столбцы с описанием действия и комментария

Запишите общие тезисы или даже полный сценарий, чтобы ваше повествование было сфокусированным и лаконичным.

3. Длина может повлиять на эффективность

Какой длины идеальный скринкаст? К сожалению, простого ответа нет — это зависит от обстоятельств. Короткие видео — это здорово, но если вы пропустите важную информацию, зрители будут раздражены и недовольны.

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

4. Качество звука имеет значение

Звук может существенно повлиять на общее качество записи скринкаста. Посмотрим правде в глаза: плохой звук отпугивает зрителей быстрее, чем что-либо другое.

Лучший способ записать хороший звук — это спланировать его еще до того, как вы начнете запись.

Не используйте микрофон, встроенный в ваш компьютер

Это удобно и работает в крайнем случае, но не даст вам наилучших результатов. Используйте внешний микрофон, чтобы значительно улучшить качество звука. Подойдет даже недорогой USB-микрофон.

Избавьтесь от фонового шума

Ваш микрофон может улавливать любой шум вокруг вас, в том числе относительно тихие, такие как флуоресцентное освещение и кондиционеры, а также более громкие, такие как лай соседской собаки на улице.

Некоторые программы для создания скринкастов позволяют впоследствии «очистить» этот тип шума из записи, но гораздо лучше устранить их в первую очередь.

Стратегически разместите микрофон

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

5. Запишите подходящий размер

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

Не показывайте области, которые отвлекают, мешают или просто не способствуют достижению цели вашего видео.

< бр />

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

Когда вы записываете часть своего экрана, убедитесь, что размеры соответствуют месту, где вы собираетесь размещать видео. Придерживайтесь стандартных диапазонов.Нечетные размеры — слишком высокие или слишком широкие — могут оставить ваше видео с темными полосами-заполнителями по бокам или вверху при просмотре на YouTube, Vimeo и т. д.

Если вы не знаете, какой размер нужно записать, можно включить все, что есть на экране. Лучше запечатлеть все, чем пропустить что-то важное.

6. Если вы используете веб-камеру, убедитесь, что она хорошо выглядит

Не недооценивайте зрительный контакт. Видеозапись с веб-камеры вызывает доверие. Ваша аудитория сможет заглянуть вам в глаза, увидеть, кто вы есть, и легче понять ваше сообщение.

Подготовьтесь к тому, чтобы хорошо выглядеть на камеру. Обратите внимание на то, что находится позади вас. Если на заднем плане есть что-то, что вы не хотите видеть, переместите это или очистите.

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

При этом вам не обязано использовать запись с веб-камеры. Если у вас нет хорошего результата, не используйте его. Ваша запись скринкаста может работать и без него.

7. Следите за курсором мыши

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

Не обводите объекты

Перемещение курсора мыши по кругу, как если бы вы разговаривали руками, приведет к тому, что ваши зрители будут сбиты с толку и не будут знать, куда им смотреть. Вместо этого двигайте курсор мыши осознанно и целенаправленно.

Не двигайтесь со скоростью света

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

Сглаживание движения курсора при записи экрана

Эффект сглаживания курсора в Camtasia — отличный способ добавить блеска вашим записям экрана.

Эффект берет движение курсора в записи экрана и превращает его в плавную линию от одной точки к другой.

8. Если можете, удалите ошибки и ненужный контент

Ошибки случаются даже с лучшими из нас. Вы будете записывать, и ваша мышь будет перемещаться не в то место, вы нажмете не на то, что нужно, или произойдет что-то еще неожиданное. Ничего страшного, это поправимо.

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

Это не только поможет вашему видео быть более лаконичным и содержательным, но и сделает ваш конечный результат более безупречным и профессиональным.

 советы по совместному использованию записи экрана

9. Знайте, где вы собираетесь поделиться своим видео

Где разместить видео — это животрепещущий вопрос, на который вы должны ответить в начале процесса создания видео. Заранее решите, где разместить видео, чтобы знать:

  • Какой тип файла вам нужен?
  • Каких размеров должно быть ваше видео?
  • Какую информацию имеет смысл включать в видеофайл?
  • Как я буду загружать видео (вручную или напрямую)?

Чем больше вы знаете заранее, тем лучше, так как это поможет вам создать лучшее видео для ваших зрителей.

Ну, теперь вы знаете основы! Если вам нужна программа для записи экрана, TechSmith предлагает решения для захвата любой области экрана, редактирования, добавления эффектов, музыки и многого другого.

API записи MediaStream, иногда называемый API записи мультимедиа или API MediaRecorder, тесно связан с API захвата и потоков мультимедиа и API WebRTC. API записи MediaStream позволяет захватывать данные, сгенерированные объектом MediaStream или HTMLMediaElement, для анализа, обработки или сохранения на диск. Кроме того, с ним удивительно легко работать.

Основные понятия

API MediaStream Recording состоит из одного основного интерфейса MediaRecorder , который выполняет всю работу по сбору данных из MediaStream и доставке их вам для обработки. Данные доставляются серией доступных событий, уже в формате, указанном при создании MediaRecorder. Затем вы можете продолжить обработку данных или записать их в файл по желанию.

Обзор процесса записи

Процесс записи потока прост:

  1. Настройте MediaStream или HTMLMediaElement (в форме элемента или), чтобы они служили источником медиаданных.
  2. Создайте объект MediaRecorder, указав исходный поток и любые необходимые параметры (например, тип MIME контейнера или желаемую скорость передачи данных его дорожек).
  3. Назначить ondataavailable обработчику события dataavailable; это будет вызываться всякий раз, когда данные доступны для вас.
  4. После воспроизведения исходного медиафайла и достижения момента, когда вы готовы записывать видео, вызовите MediaRecorder.start(), чтобы начать запись.
  5. Обработчик событий, доступных для данных, вызывается каждый раз, когда есть готовые данные, которые вы можете использовать по своему усмотрению; событие имеет атрибут данных, значением которого является большой двоичный объект, содержащий мультимедийные данные. Вы можете принудительно вызвать событие доступности данных, тем самым доставив вам последний звук, чтобы вы могли отфильтровать его, сохранить или сделать что-то еще.
  6. Запись останавливается автоматически, когда исходное медиа перестает воспроизводиться.
  7. Вы можете остановить запись в любой момент, вызвав MediaRecorder.stop() .

Примечание. Отдельные BLOB-объекты, содержащие фрагменты записанного носителя, не обязательно будут воспроизводиться по отдельности. Носитель необходимо собрать перед воспроизведением.

Если во время записи что-то пойдет не так, в MediaRecorder будет отправлено сообщение об ошибке. Вы можете прослушивать события ошибок, настроив обработчик событий onerror.

Например, мы используем HTML Canvas в качестве источника MediaStream и останавливаем запись через 9 секунд.

Проверка и контроль состояния рекордера

Вы также можете использовать свойства объекта MediaRecorder, чтобы определить состояние процесса записи, и его методы pause() и возобновить(), чтобы приостановить и возобновить запись исходного носителя.

Если вам нужно или вы хотите проверить, поддерживается ли определенный тип MIME, это также возможно. Просто вызовите MediaRecorder.isTypeSupported() .

Изучение потенциальных источников входных данных

Если вы хотите записать вход с камеры и/или микрофона, вы можете изучить доступные устройства ввода, прежде чем начинать процесс создания MediaRecorder. Для этого вам нужно вызвать navigator.mediaDevices.enumerateDevices(), чтобы получить список доступных мультимедийных устройств. Затем вы можете изучить этот список и определить потенциальные источники входных данных и даже отфильтровать список на основе желаемых критериев.

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

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

Для получения дополнительной информации

Чтобы узнать больше об использовании API записи MediaStream, см. раздел Использование API записи MediaStream, в котором показано, как использовать API для записи аудиоклипов. Во второй статье, Запись медиа-элемента, описывается, как получить поток от элемента или и использовать захваченный поток (в данном случае, записать его и сохранить на локальный диск).

Ссылка

Каждый раз, когда запись медиаданных завершается, они доставляются потребителям в форме BLOB-объектов с помощью BlobEvent типа dataavailable .

Основной интерфейс, реализующий API записи MediaStream.

Интерфейс, представляющий ошибки, выдаваемые API записи MediaStream. Его свойство error является DOMException, указывающим, что произошла ошибка.

Читайте также:

      

  • Как увидеть загрузку диска в Windows 7
  •   

  • Видеокарта Asus x553m
  •   

  • Как изменить букву диска
  •   

  • Какое напряжение должно быть на оперативной памяти ddr3
  •   

  • Загружает операционную систему с диска в оперативную память

  • Если при операции произошла врачебная ошибка что делать
  • Если при межевании земельного участка допущены ошибки
  • Если при заполнении трудовой книжки сделана ошибка
  • Если при заполнении трудовой книжки допущена ошибка
  • Если при заполнении приходного кассового ордера допущена ошибка то она