Форматированный ввод-вывод

Блочный ввод и вывод

Вывод символов или строк

Вывод символов и строк выполняют функции fputc, fputs, putc, putchar, puts

#include <stdio.h>

int fputc(int c, FILE *stream);

int fputs(const char *s, FILE *stream);

int putc(int c, FILE *stream);

int putchar(int c);

int puts(const char *s);

fputc() выводит символ c, преобразуя его в unsigned char, в поток stream.

fputs() выводит строку s в поток s tream, не завершая ее символом '\0'.

putc() эквивалентна fputc(), но реализована через макрос.

putchar(c) эквивалентеа putc(c,stdout).

puts() выводит строку s в поток stdout.

Возвращаемые значения

Функции fputc(), putc() и putchar() возвращают символ, выведенный как unsigned char, преобразованный к типу int.

Функции puts() и fputs() возвращают неотрицательное число, длину строки.

С помощью функций fread, fwrite организуется так называемый байтовый поток ввода - вывода

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,

FILE *stream);

Функция fread() читает nmemb блоков данных размером size каждый из потока stream и сохраняет их в памяти по адресу, задаваемому указателем ptr.

Функция fwrite() записывает nmemb блоков данных размером size байтов в поток stream, выбирая их из памяти, адресуемой указателем ptr.

Функции fread() и fwrite() возвращают число успешно обработанных блоков (а не байтов) и сообщение об ошибке в случае неудачи.

Другие функции работы с файлами:

int fclose(FILE *stream); // закрывает поток, возвращает 0 в случае успеха

int _fcloseall(void); //закрывает все открытые потоки, возвращает количество закрытых файлов

int fflush(FILE *stream); // запись («сброс») буфера в поток

int feof(FILE *stream); // возвращает 1, если достигнут конец файла (потока)

int fgetpos(FILE *stream, fpos_t *pos); // возвращает смещение курсора

int fseek(FILE *stream, long offset, int origin); // смещает курсор в заданную позицию

Существуют стандартные потоки (тип данных — FILE*):

stdin — стандартный поток ввода (по умолчанию — консоль);

stdout — стандартный поток вывода (по умолчанию — консоль);

stderr — стандартный поток ошибок;

stdaux — стандартный вспомогательный поток;

stdprn — стандартный принтер.

Данные потоки могут быть переопределены с использованием функции fopen.

Для форматированного вывода в поток предназначена функция

fprintf(FILE* stream, const char* formatted_string, arguments, …)

Для подстановки значений переменных в строку вывода используют символы подстановки (спецификаторы формата), начинающиеся с символа «%»:

% [флаги][размер][.точность][модификатор_длины] тип_данного

Флаги:

«-» — выравнивание результата по левому краю (по умолчанию — по правому относительно заданного количества выводимых символов);

«+» — результат всегда начинается со знака (+/-);

«#» — особая форма отображения результата.

Размер показывает, сколько символов отводится для записи результата, может быть представлен в следующих форматах:

n — минимум n символов отводится для записи числа, недостающие символы заменяются пробелами;

0n — то же, но недостающие символы заменяются нулями;

* — список аргументов содержит размеры данных.

Точность показывает для вещественных чисел количество знаков после десятичной точки.

Модификатор длины может принимать одно из значений:

F — «длинный» указатель;

N — «короткий» указатель;

h — short int;

l — long int, double;

L — long double.

Тип данного может принимать одно из значений:

%d, %i — знаковое десятичное целое;

%u — беззнаковое десятичное целое;

%o — беззнаковое восьмеричное целое;

%x, %X — беззнаковое шестнадцатеричное целое;

%f — знаковое вещественное;

%e, %E —вещественное в экспоненциальной форме;

%g, %G —вещественное, форма зависит от числа, размера и точности;

%c — символ;

%s — строка;

%% — символ «%»;

%n, %p — указатель.

Аргументы, передаваемые в функцию, должны соответствовать количеству и типу спецификаторам формата.

Для форматированного ввода данных из потока используется функция

fscanf(FILE* stream, const char* formatted_string, arguments, …)

Строка также может содержать спецификаторы формата, при этом:

— при невозможности предобразования строки в число, число принимает значение ноль;

— строкой считается слово до разделителя (пробел, табуляция, перевод строки).

Для стандартных потоков определены аналогичные функции:

printf(const char* formatted_string, arguments, …)

scanf(const char* formatted_string, arguments, …)

являющиеся аналогами описанных ранее функций, разница заключается в том, что используются стандартные потоки ввода и вывода (stdin, stdout), которые в качестве аргументов не указываются.

Определены функции, использующие вместо потока строку:

sprintf(char *dest, const char* formatted_string, arguments, …)

sscanf(char *src, const char* formatted_string, arguments, …)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: