Студопедия
Главная страница | Контакты | Случайная страница

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

Спецификаторы преобразования

Читайте также:
  1. Алгебраические преобразования систем линейных уравнений
  2. Альтернативы развития России в феврале-октябре 1917 г. Приход к власти большевиков и первые преобразования советской власти (осень 1917- лето 1918 гг.).
  3. Билет 29.Столыпинские преобразования. Общественно-политическое и экономическое развитие России в 1907-1914гг.
  4. Билет. Конец XVIII первая четверть XIX веков: крушение "старого порядка" в Европе и попытка преобразования России.
  5. В зависимости от размеров сегментов генома, подвергающихся преобразованиям, мутации разделяют на геномные, хромосомные и генные.
  6. ВНЕШНЯЯ ПОЛИТИКА И СОЦИАЛЬНО-ЭКОНОМИЧЕСКИЕ ПРЕОБРАЗОВАНИЯ ПЕТРА I
  7. Вопрос 36. Мировой экон. кризис 1929-33гг. и его влияние на западное об-во. Соц.-экон. преобразования Советск. гос-ва в 30-е гг. Индустриализ-я и коллективиза-я с/х.
  8. Движение декабристов. Проекты преобразования Российского государства.
  9. Деятельностный подход к мотивации в школе А.Н.Леонтьева. Общая характеристика потребностей и мотивов. Опредмечивание потребностей и другие механизмы их преобразования.
  10. Деятельность человека, связанную с процессами получения, преобразования, накопления и передачи информации, называют информационной деятельностью.

Каждый спецификатор формата ввода начинается со знака %, причем спецификаторы формата ввода сообщают функции scanf() тип считываемых данных. Спецификаторам преобразования в порядке слева направо ставятся в соответствие элементы списка аргументов. Рассмотрим некоторые примеры.

Спецификаторы преобразования для функции scanf()

Код Значение
%a Читает значение с плавающей точкой (только С99)
%c Читает одиночный символ
%d Читает десятичное целое число
%i Читает целое число как в десятичном, так и восьмеричном или шестнадцатеричном формате
%e Читает число с плавающей точкой
%f Читает число с плавающей точкой
%g Читает число с плавающей точкой
Читает восьмеричное число
%s Читает строку
%x Читает шестнадцатеричное число
%p Читает указатель
%n Принимает целое значение, равное количеству уже считанных символов
%u Читает десятичное целое число без знака
%[] Читает набор сканируемых символов
%% Читает знак процента

 

Функции fprinf() и fscanf()

В системе ввода/вывода языка С также имеются функции fprintf() и fscanf(). Эти две функции, за исключением того, что предназначены для работы с файлами, ведут себя точно так же, как и printf() и scanf(). Прототипы функций fprintf() и fscanf() следующие:

int fprintf(FILE * уф, const char * управляющая_строка,...);

int fscanf(FILE * уф, const char * управляющая_строка,...);

где уф — указатель файла, возвращаемый в результате вызова fopen(). Операции ввода/вывода функции fprintf() и fscanf() выполняют с тем файлом, на который указывает уф.

Функции fread() и fwrite()

Для чтения и записи данных, тип которых может занимать более 1 байта, в файловой системе языка С имеется две функции: fread() и fwrite(). Эти функции позволяют читать и записывать блоки данных любого типа. Их прототипы следующие:

size_t fread(void * буфер, size_t колич_байт, size_t счетчик, FILE * уф);

size_t fwrite(const void * буфер, size_t колич_байт, size_t счетчик, FILE * уф);

Для fread() буфер — это указатель на область памяти, в которую будут прочитаны данные из файла. А для fwrite() буфер — это указатель на данные, которые будут записаны в файл. Значение счетчик определяет, сколько считывается или записывается элементов данных, причем длина каждого элемента в байтах равна колич_байт. (Вспомните, что тип size_t определяется как одна из разновидностей целого типа без знака.) И, наконец, уф — это указатель файла, то есть на уже открытый поток.

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

Функция rewind()

Функция rewind() устанавливает указатель текущей позиции в файле на начало файла, указанного в качестве аргумента этой функции. Иными словами, функция rewind() выполняет "перемотку" (rewind) файла. Вот ее прототип:

void rewind(FILE * уф);

где уф — это допустимый указатель файла.

Ввод / вывод при прямом доступе: функция fseek()

При прямом доступе можно выполнять операции ввода/вывода, используя систему ввода/вывода языка С и функцию fseek(), которая устанавливает указатель текущей позиции в файле. Вот прототип этой функции:

int fseek(FILE * уф, long int колич_байт, int начало_отсчета);

Здесь уф — это указатель файла, возвращаемый в результате вызова функции fopen(), колич_байт — количество байтов, считая от начало_отсчета, оно определяет новое значение указателя текущей позиции, а начало отсчёта — это один из следующих макросов:

Начало отсчета Макрос

Начало файла SEEK_SET

Текущая позиция SEEK_CUR

Конец файла SEEK_END

Поэтому, чтобы получить в файле доступ на расстоянии колич_байт байтов от начала файла, начало_отсчета должно равняться SEEK_SET. Чтобы при доступе расстояние отсчитывалось от текущей позиции, используйте макрос SEEK_CUR, а чтобы при доступе расстояние отсчитывалось от конца файла, нужно указывать макрос SEEK_END. При успешном завершении своей работы функция fseek() возвращает нуль, а в случае ошибки — ненулевое значение.

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

long int ftell(FILE * уф);

Функция возвращает текущее значение указателя текущей позиции в файле, связанном с указателем файла уф. При неудачном исходе она возвращает -1.

Использование feof()

Как уже говорилось, если достигнут конец файла, то getc() возвращает EOF. Однако проверка значения, возвращенного getc(), возможно, не является наилучшим способом узнать, достигнут ли конец файла. Во-первых, файловая система языка С может работать как с текстовыми, так и с двоичными файлами. Когда файл открывается для двоичного ввода, то может быть прочитано целое значение, которое, как выяснится при проверке, равняется EOF. В таком случае программа ввода сообщит о том, что достигнут конец файла, чего на самом деле может и не быть. Во-вторых, функция getc() возвращает EOF и в случае отказа, а не только тогда, когда достигнут конец файла. Если использовать только возвращаемое значение getc(), то невозможно определить, что же на самом деле произошло. Для решения этой проблемы в С имеется функция feof(), которая определяет, достигнут ли конец файла. Прототип функции feof() такой:

int feof(FILE * уф);

Если достигнут конец файла, то feof() возвращает true (истина); в противном же случае эта функция возвращает нуль.

Функция ferror()

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

int ferror(FILE * уф);

где уф — допустимый указатель файла. Она возвращает значение true (истина), если при последней операции с файлом произошла ошибка; в противном же случае она возвращает false (ложь). Так как при любой операции с файлом устанавливается свое условие ошибки, то после каждой такой операции следует сразу вызывать ferror(), а иначе данные об ошибке могут быть потеряны.




Дата добавления: 2015-02-16; просмотров: 89 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав