Т.В. Руденко - Сборник задач и упражнений по языку Си (1114664), страница 12
Текст из файла (страница 12)
1. pr1 ; pr2 ; ... ; prNпоследовательное выполнение команд prI - как если бы онибыли переданы интерпретатору по одной команде в строкеВНИМАНИЕ !!! приоритет операции | выше, чем приоритет операции; однако, возможно использование скобок: напрмер, ( pr1; pr2 ) | pr3, что приведет к конкатенации результатов работы pr1 и pr2, которые будут переданы процессу pr3 как входные данные.2. pr1 && pr2выполнить pr1; в случае успеха выполнить pr23. pr1 || pr2выполнить pr1; в случае неудачи выполнить pr25410. ПРИЛОЖЕНИЯ10.1Библиотека стандартных функций языка СЗдесь приводится краткое описание некоторых библиотечных функций,утвержденных в качестве ANSI-стандарта языка Cи.
Более подробное и полноеописание этой библиотеки можно найти в [1] и [2].10.1.1 Функции работы со строкамиЭти функции определены в головном файле <string.h>. Если копирование имеет дело с объектами, перекрывающимися по памяти, то поведениефункций не определено. Функции сравнения рассматривают аргументы как массивы элементов типа unsigned char.char *strcpy(char *s, const char *ct)копирует строку ct в строку s, включая ‘\0’; возвращает s.char *strcat (char *s, const char *ct)приписывает ct к s; возвращает s.char strcmp(const char *cs, const char *ct)сравнивает cs с ct; возвращает значение меньшее 0, если cs<ct; равное 0,если cs==ct, и большее 0,если cs>ct.char *strchr(const char *cs, char c)возвращает указатель на первое вхождение c в cs или, если такового неоказалось, NULL.char *strrchr(const char *cs, char c)возвращает указатель на последнее вхождение c в cs или, если таковогоне оказалось, NULL.char *strstr(const char *cs, const char *ct)возвращает указатель на первое вхождение ct в cs или, если такового неоказалось, NULL.size_t strlen(const char *cs)возвращает длину cs (без учета ‘\0’).char *strtok(char *s, const char *ct)ищет в s лексему, ограниченную литерами из ct.Последовательные вызовы функции strtok разбивают строку s на лексемы.
Ограничителем лексемы может быть любая литера, входящая встроку ct. В первом вызове функции указатель s не равен NULL. Функ55ция находит в строке s первую лексему, состоящую из литер, не входящих в ct; работа этого вызова завершается тем, что поверх следующейлитеры пишется ‘\0’ и возвращается указатель на выделенную лексему.Каждый последующий вызов функции strtok, в котором указатель s равен NULL, выдает указатель на следующую лексему, которую функциябудет искать сразу за концом предыдущей.
Функция возвращает NULL,если далее никакой лексемы не обнаружено. Параметр ct от вызова квызову может варьироваться.void *memcpy(void *s, const void *ct, size_t n)копирует n литер из ct в s и возвращает s.void *memset(void *s, char c, size_t n)размещает литеру c в первых n позициях строки s и возвращает s.10.1.2 Функции проверки класса литерГоловной файл <ctype.h> предоставляет функции, которые позволяютопределить, принадлежит ли литера определенному классу. Параметр каждой изэтих функций имеет тип int и должен быть либо значением unsigned char, приведенным к int, либо значением EOF; возвращаемое значение тоже имеет тип int.Функции возвращают ненулевое значение (“истину”), если аргумент принадлежит указанному классу литер, и нуль (“ложь”) – в противном случае.int isupper (int c)int islower (int c)int isalpha (int c)int isdigit (int c)int isalnum (int c)int isxdigit (int c)int isspace (int c)int isgraph (int c)int isprint (int c)буква верхнего регистрабуква нижнего регистраisupper(c) или islower(c) истиныдесятичная цифраisalpha (c) или isdigit (c) истинышестнадцатиричная цифрапробел, новая-строка, возврат-каретки, табуляцияпечатаемая литера, кроме пробелапечатаемая литера, включая пробелКроме этих функций в файле есть две функции, выполняющие преобразование букв из одного регистра в другой.int tolower (int c)если с – буква верхнего регистра, то tolower(c) выдаст эту букву нанижнем регистре; в противном случае она вернет c.int toupper (int c)если с – буква нижнего регистра, то toupper(c) выдаст эту букву наверхнем регистре; в противном случае она вернет c.5610.1.3 Ввод-выводПоток - это источник или получатель данных; его можно связать с диском или каким-либо другим внешним устройством.
Библиотека поддерживаетдва вида потоков: текстовый и бинарный.Текстовый поток - это последовательность строк. Каждая строка имеетнуль или более литер и заканчивается литерой ‘\n’.Бинарный поток - это последовательность не преобразуемых байтов,представляющих собой некоторые промежуточные данные, которые обладаюттем свойством, что, если их записать, а затем прочитать той же системой вводавывода, то мы получим информацию, совпадающую с исходной.В UNIXе эти виды потоков не различаются.Поток соединяется с файлом или устройством посредством его открытия; эта связь разрывается при закрытии потока. Открытие файла возвращаетуказатель на объект типа FILE, который содержит всю информацию, необходимую для управления этим потоком.
Если не возникает двусмысленности, далеебудем использовать термины «файловый указатель» и «поток» как равнозначные.Когда программа начинает работу, уже открыты три потока: stdin, stdoutи stderr.Все приведенные ниже функции, связанные с вводом-выводом, определены в головном файле <stdio.h>.10.1.3.1Операции над файламиFILE *fopen ( const char *filename, const char* mode )функция fopen открывает файл с заданным именем и возвращает указатель на файл или NULL, если файл не удалось открыть.Допустимые значения режима:«r»«w»текстовый файл открывается для чтениятекстовый файл создается для записи; старое содержимое (еслионо было) удаляется«a»текстовый файл открывается или создается для записи в конецфайла«r+»текстовый файл открывается для исправления (т.е.
для чтения изаписи)«a+»текстовый файл создается или открывается для исправленияуже существующей информации и добавления новой в конецфайлаРежим «исправления» позволяет читать и писать в один и тотже файл; при переходах от операции чтения к операции записи и обратно нужновызывать функцию fflush либо функцию позиционирования файла. Если значение режима дополнить буквой b (например, «rb» или «a+b»), то это будет означать, что файл бинарный.FILE *freopen ( const char *filename, const char* mode, FILE *stream)57функция freopen открывает файл с указанным режимом и связывает егос потоком stream. Она возвращает stream или, в случае ошибки, NULL.Обычно функция freopen используется для замены файлов, связанных сstdin, stdout или stderr, другими файлами.int fflush ( FILE *stream)если функцию fflush применить к потоку вывода, то происходит дозапись всех оставшихся на буфере (еще не записанных ) данных.
Для потока ввода эта функция не определена. Функция возвращает EOF, есливо время записи возникла ошибка, и нуль в противном случае. Обращение вида fflush (NULL) выполняет указанные операции для всех потоков вывода.int fclose ( FILE *stream)функция fclose производит дозапись еще не записанных буферизованных данных, сбрасывает непрочитанный буферизованный ввод, освобождает все автоматически запрошенные буфера, после чего закрываетпоток.
Возвращает EOF в случае ошибки и нуль в противном случае.int remove(const char *filename)функция remove удаляет файл с указанным именем; последующая попытка открыть файл с таким именем вызовет ошибку. Возвращает ненулевое значение в случае неудачной попытки.int rename(const char *oldname, const char* newname)функция rename заменяет старое имя файла oldname новым newname;если попытка изменить имя оказалась неудачной, то возвращает ненулевое значение, в противном случае - нуль.10.1.3.2Форматный выводФункции форматного вывода осуществляют вывод информации в соответствии с форматом.int fprintf ( FILE* stream, const char* format,...)функция преобразует и пишет вывод в поток stream под управлениемформата format.
Возвращаемое значение - число записанных литер или,в случае ошибки, отрицательное значение.Строка формата может содержать обычные литеры, которые копируются ввыводной поток, и спецификации преобразования, которые вызывают преобразование и печать значений других аргументов в том порядке, как они перечислены. Каждая спецификация преобразования начинается символом % и заканчивается литерой-спецификатором преобразования. Между % и литеройспецификатором могут быть расположены символы управления печатью ( в томпорядке, в каком они перечислены ниже):• флаги58указывает, что преобразованное значение аргументадолжно быть прижато к левому краю поля;+предписывает указывать знак числа;пробелесли первая литера - не знак, то числу должен предшествовать пробел;0указывает, что числа должны дополняться ведущими нулями до всей ширины поля;#указывает на одну из следующих форм вывода: для о первой цифрой должен быть 0; для х или Х ненулевому результату должны предшествовать 0х или 0Х; для e, E, f, g и G вывод всегда должен содержать десятичную точку; для g и G хвостовые нули не отбрасываются.• число, определяющее минимальную ширину поля.
Преобразованныйаргумент будет напечатан в поле, размер которого не меньше указанной ширины. Если число литер, необходимых для представления значения аргумента,больше указанной ширины поля, то значение будет напечатано в поле большегоразмера; если меньше - поле будет дополнено слева (или справа, если числоприжимается к левому краю). Поле дополняется пробелами (или нулями, еслиприсутствует флаг дополнения нулями).• точка, отделяющая указатель ширины поля от указателя точности.• число, задающее точность, которое определяет максимальное количество литер, печатаемых из строки, или количество цифр после десятичной точкив преобразованиях e, E или f, или количество значащих цифр для g- или Gпреобразования, или минимальное количество цифр при печати целого (до необходимой ширины поля число дополняется ведущими нулями).• модификаторы h, l или L. Литера h указывает, что соответствующийаргумент должен печататься как short или unsigned short; литера l - как long илиunsigned long; литера L - как long double.литеры-спецификаторы и их смысл при выводе------------------------------------------------------------------------------------------------------литератип аргумента; вид печати------------------------------------------------------------------------------------------------------d,iint; знаковая десятичная запись.оint; беззнаковая восьмеричная запись ( без ведущего 0).x,Xint; беззнаковая шестнадцатиричная запись ( без ведущих 0x или 0X),в качестве цифр от 10 до 15 используются abcdef для x и ABCDEFдля X.uint; беззнаковое десятичное целое.cint; единичная литера после преобразования в unsigned char.schar *; литеры строки печатаются, пока не встретится ‘\0’ или не будет напечатано количество литер, указанное точностью.fdouble; десятичная запись вида [-]mmm.ddd, где количество d специфицируется точностью.
По умолчанию точность равна 6; нулеваяточность подавляет печать десятичной точки.e,Edouble; десятичная запись вида [-]m.dddddde±xx или вида[-]m.ddddddE±xx, где d специфицируется точностью. По умолчанию59g,Gp%точность равна 6; нулевая точность подавляет печать десятичнойточки.double; используется %e и %E, если экспонента меньше 4 или больше или равна точности; в противном случае используется %f. Хвостовые нули и точка в конце не печатаются.void*; печатает в виде указателя ( представление зависит от реализации).никакие аргументы не преобразуются; печатается %int printf ( const char* format,...)семантика функции полностью эквивалентна fprintf (stdout, const char*format,...)int sprintf (char *s, const char* format,...)sprintf действует так же, как и printf, только вывод осуществляется встроку s, которая завершается литерой ‘\0’. Строка s должна быть достаточно большой, чтобы вместить результат вывода.
Возвращает количество записанных литер (без учета ‘\0’).10.1.3.3Форматный вводФункции форматного ввода осуществляют ввод информации в соответствии с форматом.int fscanf (FILE* stream, const char* format,...)функция читает данные из потока stream под управлением форматаformat. Введенные данные присваиваются аргументам, следующим зааргументом format. Все эти аргументы должны быть указателями.Функция завершает работу, если исчерпался формат или возниклаошибка преобразования.