Керниган и Ритчи - Язык программирования Си (793773), страница 60
Текст из файла (страница 60)
Формат ввода для float состоит из необязательногознака, строки цифр, возможно с десятичной точкой, и необязательного порядка, состоящего из Еили е и целого, возможно со знакомpзначение указателя в виде, в котором printf ("%p") его напечатает; void *nзаписывает в аргумент число символов, прочитанных к этому моменту в этом вызове; int *.Никакого чтения ввода не происходит. Счетчик числа введенных элементов не увеличивается[…]выбирает из ввода самую длинную непустую строку, состоящую из символов, заданных вквадратных скобках; char *.
В конец строки добавляется '\0'. Спецификатор вида []...]включает ] в задаваемое множество символов[^…]выбирает из ввода самую длинную непустую строку, состоящую из символов, не входящих взаданное в скобках множество. В конец добавляется '\0'. Спецификатор вида [^]...]включает ] в задаваемое множество символов%обычный символ %; присваивание не делаетсяВ 1.4. Функции ввода-вывода символовint fgetc(FILE *stream)fgetc возвращает следующий символ из потока stream в виде unsigned char (переведенную вint) или EOF, если исчерпан файл или обнаружена ошибка.char *fgets(char *s, int n, FILE *stream)fgets читает не более n-1 символов в массив s, прекращая чтение, если встретился символ новойстроки, который включается в массив; кроме того, записывает в массив '\0'.
Функция fgetsвозвращает s или, если исчерпан файл или обнаружена ошибка, NULL.int fputc(int с, FILE *stream)fputc пишет символ с (переведенный в unsigned char) в stream. Возвращает записанныйсимвол или EOF в случае ошибки.int fputs(const char *s, FILE *stream)fputs пишет строку s (которая может не иметь '\n') в stream; возвращает неотрицательное целоеили EOF в случае ошибки.int getc(FILE *stream)getc делает то же, что и fgetc, но в отличие от последней, если она — макрос, stream можетбраться более одного раза.int getchar(void)getchar() делает то же, что getc(stdin).char *gets(char *s)gets читает следующую строку ввода в массив s, заменяя символ новой строки на '\0'. Возвращаетs или, если исчерпан файл или обнаружена ошибка, NULL.int putc(int с, FILE *stream)putc делает то же, что и fputc, но в отличие от последней, если putc — макрос, значение streamможет браться более одного раза.int putchar(int с)putchar(c) делает то же, что putc(c, stdout).int puts(const char *s)puts пишет строку s и символ новой строки в stdout.
Возвращает EOF в случае ошибки, илинеотрицательное значение, если запись прошла нормально.int ungetc(int с, FILE *stream)ungetc отправляет символ с (переведенный в unsigned char) обратно в stream; приследующем чтении из stream он будет получен снова. Для каждого потока вернуть можно не болееодного символа. Нельзя возвращать EOF. В качестве результата ungetc выдает отправленный назадсимвол или, в случае ошибки, EOF.В 1.5.
Функции прямого ввода-выводаsize_t fread(void *ptr, size_t size, size_t nobj, FILE *strem)fread читает из потока stream в массив ptr не более nobj объектов размера size. Онавозвращает количество прочитанных объектов, которое может быть меньше заявленного. Дляиндикации состояния после чтения следует использовать feof и ferror.size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE «stream)fwrite пишет из массива ptr в stream nobj объектов размера size; возвращает числозаписанных объектов, которое в случае ошибки меньше nobj.В 1.6.
Функции позиционирования файлаint fseek(FILE *stream, long offset, int origin)fseek устанавливает позицию для stream; последующее чтение или запись будет производиться сэтой позиции. В случае бинарного файла позиция устанавливается со смещением offset —относительно начала, если origin равен SEEK_SET; относительно текущей позиции, если originравен SEEK_CUR; и относительно конца файла, если origin равен SEEK_END. Для текстового файлаoffset должен быть нулем или значением, полученным с помощью вызова функции ftell. Приработе с текстовым файлом origin всегда должен быть равен SEEK_SET.long ftell(FILE *stream)ftell возвращает текущую позицию потока stream или -1L, в случае ошибки.void rewind(FILE *stream)rewind (fp) делает то же, что и fseek(fp, 0L, SEEK_SET); clearerr(fp).int fgetpos(FILE *stream, fpos_t *ptr)fgetpos записывает текущую позицию потока stream в *ptr для последующего использования еев fsetpos.
Тип fpos_t позволяет хранить такого рода значения. В случае ошибки fgetposвозвращает ненулевое значение.int fsetpos(FILE *stream, const fpos_t *ptr)fsetpos устанавливает позицию в stream, читая ее из *ptr, куда она была записана ранее спомощью fgetpos. В случае ошибки fsetpos возвращает ненулевое значение.В 1.7. Функции обработки ошибокМногие функции библиотеки в случае ошибки или конца файла устанавливают индикаторы состояния. Этииндикаторы можно проверять и изменять.
Кроме того, целое выражение errno (объявленное в <errno.h>)может содержать номер ошибки, который дает дополнительную информацию о последней из обнаруженныхошибок.void clearerr(FILE *stream)clearerr очищает индикаторы конца файла и ошибки потока stream.int feof(FILE *stream)feof возвращает ненулевое значение, если для потока stream установлен индикатор конца файла.int ferror(FILE *stream)ferror возвращает ненулевое значение, если для потока stream установлен индикатор ошибки.void perror(const char *s)perror(s) печатает s и зависимое от реализации сообщение об ошибке, соответствующее целомузначению в errno, т.
е. делает то же, что и обращение к функции fprintf видаfprintf(stderr, "%s: %s\n", s, " сообщение обошибке")См. strerror в параграфе ВЗ.В 2. Проверки класса символа: <ctype.h>Заголовочный файл <ctype.h> объявляет функции, предназначенные для проверок символов. Аргументкаждой из них имеет тип int и должен либо представлять собой EOF, либо быть значением unsignedchar, приведенным к int; возвращаемое значение тоже имеет тип int. Функции возвращают ненулевоезначение ("истина"), когда аргумент с удовлетворяет описанному условию или принадлежит указанномуклассу символов, и нуль в противном случае.isalnum(c)— isalpha(c) или isdigit (с) есть истинаisalpha(c)— isupper(c) или islower(c) есть истинаiscntrl(c)— управляющий символisdigit(c)— десятичная цифраisgraph(c)— печатаемый символ кроме пробелаislower(c)— буква нижнего регистраisprint(c)— печатаемый символ, включая пробелispunct(c)— печатаемый символ кроме пробела, буквы или цифрыisspace(c)— пробел, смена страницы, новая строка, возврат каретки, табуляция, вертикальнаятабуляцияisupper(c)— буква верхнего регистраisxdigit(c) — шестнадцатеричная цифраВ наборе семибитовых ASCII-символов печатаемые символы находятся в диапазоне от 0x20 (' ') до Ох7Е ('—'); управляющие символы — от 0 (NUL) до 0x1F (US) и Ox7F (DEL).Помимо перечисленных есть две функции, приводящие буквы к одному из регистров:int tolower(int с)— переводит с на нижний регистр;int toupper(int с)— переводит с на верхний регистр.Если с — буква на верхнем регистре, то tolower(с) выдаст эту букву на нижнем регистре; в противномслучае она вернет с.
Если с — буква на нижнем регистре, то toupper(с) выдаст эту букву на верхнемрегистре; в противном случае она вернет с.В 3. Функции, оперирующие со строками: <string. h>Имеются две группы функций, оперирующих со строками. Они определены в заголовочном файле<string.h>. Имена функций первой группы начинаются с букв str, второй — с mem. Если копированиеимеет дело с объектами, перекрывающимися по памяти, то, за исключением memmove, поведение функцийне определено.
Функции сравнения рассматривают аргументы как массивы элементов типа unsignedchar.В таблице B 3 переменные s и t принадлежат типу char *, cs и ct — типу const char *, n — типуsize_t, а с — значение типа int, приведенное к типу char.В 3. Функции, оперирующие со строками: <string. h>char *strcpy(s, ct)копирует строку ct в строку s, включая '\0'; возвращает schar *strncpy(s, ct, n)копирует не более n символов строки ct в s; возвращает s.
Дополняетрезультат символами '\0', если символов в ct меньше nchar *strcat(s, ct)приписывает ct к s; возвращает schar *strncat(s, ct, n)приписывает не более n символов ct к s, завершая s символом '\0';возвращает schar strcmp(cs, st)сравнивает cs и ct; возвращает <0, если cs<ct, 0, если cs==ct, и >0,если cs>ct15char strncmp(cs, ct)сравнивает не более n символов cs и ct; возвращает <0, если cs<ct, 0,если cs==ct, и >0, если cs>ctchar *strchr(cs, c)возвращает указатель на первое вхождение с в cs или, если такового неоказалось, NULLchar *strrchr(cs, c)возвращает указатель на последнее вхождение с в cs или, еслитакового не оказалось, NULLsize_t strspn(cs, ct)возвращает длину начального сегмента cs, состоящего из символов,входящих в строку ctsize_t strcspn(cs, ct)возвращает длину начального сегмента cs, состоящего из символов, не15Здесь и ниже под такими выражениями как cs<ct не следует понимать арифметическое сравнение указателей.Подразумевается лексикографическое сравнение, т.
с. cs меньше (больше) ct, если первый несовпавший элемент в csарифметически меньше (больше) соответствующего элемента из ct. — Примеч. ред.входящих в строку ctchar *strpbrk(cs, ct)возвращает указатель в cs на первый символ, который совпал с однимиз символов, входящих в ct, или, если такового не оказалось, NULLchar *strstr(cs, ct)возвращает указатель на первое вхождение ct в cs или, если таковогоне оказалось, NULLsize_t strlen(cs)возвращает длину cschar * strerror(n)возвращает указатель на зависящуюсоответствующую номеру ошибки nchar * strtok(s, ct)ищет в s лексему, ограниченную символами из ct; более подробноеописание этой функции см.















