Брайан Керниган - Язык программирования Си. Издание 3-е, исправленное
- Название:Язык программирования Си. Издание 3-е, исправленное
- Автор:
- Жанр:
- Издательство:Невский Диалект
- Год:2001
- Город:Санкт-Петербург
- ISBN:0-13-110362-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Брайан Керниган - Язык программирования Си. Издание 3-е, исправленное краткое содержание
Книга широко известных авторов, разработчиков языка Си, переработанная и дополненная с учетом стандарта ANSI для языка Си, 2-е английское издание которой вышло в 1988 году, давно стала классикой для всех изучающих и/или использующих как Си, так и Си++. Русский перевод этой книги впервые был выпущен изд- вом "Финансы и статистика" в 1992 г. и с тех пор пользуется неизменным спросом читателей.
Для настоящего третьего русского издания перевод заново сверен с оригиналом, в него внесены некоторые поправки, учитывающие устоявшиеся за прошедшие годы изменения в терминологии, а так же учтены замечания, размещенные автором на странице http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html.
Для программистов, преподавателей и студентов.
Издание подготовлено при участии издательства "Финансы и статистика"
Язык программирования Си. Издание 3-е, исправленное - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Таблица B-2. Преобразования scanf
Символ | Данные на вводе; тип аргумента |
---|---|
d | десятичное целое; int * |
i | целое: int *. Целое может быть восьмеричным (с нулем слева) или шестнадцатеричным (с 0x или 0X слева) |
o | восьмеричное целое (с нулем слева или без него); int * |
u | беззнаковое десятичное целое; unsigned int * |
x | шестнадцатеричное целое (с 0x или 0X слева или без них): int * |
c | символы, char *. Символы ввода размещаются в указанном массиве в количестве, заданном шириной поля; по умолчанию это количество равно 1. Символ'\0' не добавляется. Символы-разделители здесь рассматриваются как обычные символы и поступают в аргумент. Чтобы прочесть следующий символ-разделитель, используйте %1s |
s | строка символов, отличных от символов-разделителей (записывается без кавычек); char *, указывающий на массив размера достаточного, чтобы вместить строку и добавляемый к ней символ '\0' |
e, f, g | число с плавающей точкой; float *. Формат ввода для float состоит из необязательного знака, строки цифр, возможно с десятичной точкой, и необязательного порядка, состоящего из Eили eи целого, возможно со знаком |
p | значение указателя в виде, в котором printf ("%р") его напечатает; void * |
n | записывает в аргумент число символов, прочитанных к этому моменту в этом вызове; int *. Никакого чтения ввода не происходит. Счетчик числа введенных элементов не увеличивается |
[...] | выбирает из ввода самую длинную непустую строку, состоящую из символов, заданных в квадратных скобках: char *. В конец строки добавляется '\0'. Спецификатор вида []...]включает ]в задаваемое множество символов |
[^...] | выбирает из ввода самую длинную непустую строку, состоящую из символов, не входящих в заданное в скобках множество. В конец добавляется '\0'. Спецификатор вида [^]...]включает ]в задаваемое множество символов |
% | обычный символ %; присваивание не делается |
B1.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пишет символ c (переведенный в 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 c);
putchar(c) делает тоже, что putc (c, stdout).
int puts(const char *s);
putsпишет строку s и символ новой строки в stdout . Возвращает EOF в случае ошибки, или неотрицательное значение, если запись прошла нормально.
int ungetc(int с, FILE *stream);
ungetcотправляет символ c (переведенный в unsigned char ) обратно в stream ; при следующем чтении из stream он будет получен снова. Для каждого потока вернуть можно не более одного символа. Нельзя возвращать EOF. В качестве результата ungetc выдает отправленный назад символ или, в случае ошибки, EOF.
B1.5. Функции прямого ввода-вывода
size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream);
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 .
B1.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 возвращает ненулевое значение.
B1.7. Функции обработки ошибок
Многие функции библиотеки в случае ошибки или конца файла устанавливают индикаторы состояния. Эти индикаторы можно проверять и изменять. Кроме того, целое выражение errno(объявленное в ) может содержать номер ошибки, который дает дополнительную информацию о последней из обнаруженных ошибок.
void clearerr(FILE *stream);
clearerrочищает индикаторы конца файла и ошибки потока stream .
Читать дальшеИнтервал:
Закладка: