Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Первым делом программа создает массив и помещает в него ряд значений. Затем она создает файл по имени numbers .dat в двоичном режиме и применяет функцию fwrite() для копирования содержимого массива в этот файл. 64-битовая последовательность для каждого значения double копируется из памяти в файл. Вы не сможете прочитать результирующий двоичный файл в текстовом редакторе, т.к. эти значения не транслируются в строки. Однако каждое значение хранится в файле точно так же, как оно хранилось в памяти, поэтому точность не теряется. Более того, каждое значение занимает 64 бита пространства в файле, благодаря чему легко вычислять местонахождение каждого значения.

Во второй части программы файл открывается для чтения и пользователю предлагается ввести индекс значения. Умножение значения индекса на количество байтов, занимаемых типом double, дает позицию в файле. Далее в программе вызывается fseek() для перехода в эту позицию и fread() для чтения значения из этого места. Обратите внимание на отсутствие спецификаторов формата. Взамен fread() копирует 8 байтов, начиная с заданной позиции, в ячейку памяти, указанную &value. После этого программа использует функцию printf() для отображения value.

558 глава 13

Ниже показаны результаты пробного запуска:

Введите индекс в диапазоне 0-999.

500

По этому индексу находится значение 50000.001996.

Введите следующий индекс (или значение за пределами диапазона для завершения):

900

По этому индексу находится значение 90000.001110.

Введите следующий индекс (или значение за пределами диапазона для завершения):

О

По этому индексу находится значение 1.000000.

Введите следующий индекс (или значение за пределами диапазона для завершения):

-1

Программа завершена.

Ключевые понятия

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

То, как в С интерпретируется входной или выходной поток байтов, зависит от применяемых функций ввода-вывода. Программа может читать и сохранять байты без их изменений либо интерпретировать байты как символы, которые, в свою очередь, могут быть интерпретированы как обычный текст или текстовое представление чисел. Аналогично, при выводе используемые функции определяют, передаются ли двоичные значения без изменений либо преобразуются в текст или текстовое представление чисел. Если есть числовые данные, которые вы хотите сохранять и затем восстанавливать без потери точности, применяйте двоичный режим и функции fread() и fwrite(). Если вы сохраняете текстовую информацию и хотите создать файл, который может быть просмотрен с помощью обычных текстовых редакторов, используйте текстовый режим и такие функции, как getc() и fprintf().

Для доступа в файл вам потребуется создать указатель файла (типа FILE *) и связать его с конкретным именем файла. Для работы с файлом в последующем коде будет применяться этот указатель, а не имя файла.

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

Резюме

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

Файловый ввод-вывод 559

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

Стандартный пакет ввода-вывода автоматически создает буферы для ввода и вывода для ускорения передачи данных. Функция fopen() открывает файл для стандартного ввода-вывода и создает структуры данных, предназначенные для хранения информации о файле и буфере. Функция fopen() возвращает указатель на такую структуру данных, и этот указатель используется другими функциями для идентификации файла, подлежащего обработке. Функции f eof() и f error() сообщают о причине отказа операции ввода-вывода.

Ввод в С рассматривается как поток байтов. Если вы применяете функцию fread(), то ввод трактуется как двоичные значения, которые должны быть помещены в указанное место памяти. Если вы используете fscanf(), getc(), fgets() или любые родственные им функции, то каждый байт рассматривается как код символа. Функции fscanf() и scanf() затем пытаются преобразовать этот код символа в другие типы, как отражено спецификаторами формата.

Например, входное значение 23 спецификатор %f преобразует в значение с плавающей запятой, спецификатор %d — в целочисленное значение, а спецификатор %s — в строку. Семейство функций getc() и fgets() оставляет ввод в виде кодов символов и сохраняет его либо в переменных типа char как отдельные символы, либо в массивах char как строки. Подобным же образом функция fwrite() помещает двоичные данные непосредственно в выходной поток, тогда как другие функции вывода перед помещением в поток вывода преобразуют несимвольные данные в символьные представления.

Стандарт ANSI С предоставляет два режима открытия файла: двоичный и текстовый. Когда файл открыт в двоичном режиме, его можно читать байт за байтом. Когда файл открыт в текстовом режиме, его содержимое может быть отображено из системного представления текста в представление С. Для систем Unix и Linux эти два режима идентичны.

Функции ввода getc(), fgets(), fscanf() и fread() обычно читают файл последовательно, стартуя с начала файла. Тем не менее, функции fseek() и ftell() позволяют программе перемещаться в любую позицию внутри файла, делая возможным произвольный доступ. Функции fgetpos() и fsetpos() распространяют аналогичную возможность на файлы больших размеров. В двоичном режиме произвольный доступ работает лучше, чем в текстовом режиме.

Вопросы для самоконтроля

Ответы на вопросы для самоконтроля приведены в приложении А.

1. Что неправильно в следующей программе:

int main(void)

{

int * fp; int k;

fp = fopen("gelatin"); for (k = 0; k < 30; k++)

fputs(fp, "Кто-то ест студень."); fclose("gelatin"); return 0;

}

560 глава 13

2. Что делает следующая программа? (Предположите, что она запускается в среде командной строки.)

#include

#include

#include

int main(int argc, char *argv[])

{

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x