Организация потокового ввода вывода. Процедурно-ориентированные средства работы с потоками, страница 2

            Для функции scanf() используется следующий спецификатор формата:

·  % с - одиночный символ,

·  % [size]c – массив символов заданного размера,

·  % s – строка символов,

·  %e, % E, %f, %g, %G – вещественное число,

·  %d, %i, %o, %x, %D, %I, %0, %X, %n – беззнаковое число.

Строко-ориентированный ввод/ вывод

Функции ввода:

·  int getch(); - ввод символа с клавиатуры без “эхо-печати”

·  int getchar(); - ввод символа с клавиатуры с “эхо-печатью”

·  int getc (FILE* stream); - ввод символа из заданного потока

FILE * - указатель файлового потока (т.е. указатель на структуру, содержащую атрибуты, описывающие файловый поток. Все эти функции считывают символ из буфера после нажатия клавиши <ENTER>. В случае ошибки возвращают  EOF.

Функции вывода:

·  int putchar (int c); - вывод символа на экран

·  int putc (int c, FILE* stream); - вывод символа на экран в поток stdout или stderr

Эти функции возвращают значение первого аргумента или EOF в случае ошибки.

·  int puts (const char * );  - вывод строки

·  int gets (const char *); - ввод строки

Для ввода чисел с помощью gets() необходимо воспользоваться функциями atoi( ),       atol( ), atof( ) для преобразования строки к числам типа int, long u double. Эти функции находятся в модуле <stdlib.h>.

# include < stdio.h>

# include < stdleb.h >

void main ( )

{

 float value;

 char buf [20];

 puts ("введите вещественное число");

 gets (buf);

 value = atof(buf);

 printf ("%f\n", value);

}

//копирование байтов из stdin в stdout

# include <stdio.h>

void main ( )

{

 int c;

 while (( c = getchar( )!=EOF ) putchar(с);

}

Файловые потоки

Файлы подразделяются на текстовые и бинарные. Основные функции работы с файловыми потоками содержатся в <stdio.h>. Указатель файлового потока FILE* - это указатель на структуру, определенную в модуле <stdio.h>.

Текстовые файлы

Основные функции:

·  открыть файловый поток

FILE * fopen (const char * filename, const char * mode);

Атрибут mode задает режим доступа (по умолчанию текстовый).

Режим доступа

Текстовый

Двоичный

Назначение

"r"

"rt"

"rb"

Открытие существующего файла только для  чтения

"w"

"wt"

"wb"

Создание нового файла только для записи или перезапись существующего файла с тем же именем

"a"

"at"

"ab"

Открытие файла в режиме “только для записи” с добавлением новой информации в конец файла

"r +"

"r + t"

"rb +"

Открытие существующего файла для чтения и записи

"w + "

"wt +"

"wb +"

Создание нового файла для чтения и записи или перезапись существующего файла с тем же именем

"a + "

"at +"

"ab +"

Открытие существующего файла для чтения и записи с добавлением новой информации в конец файла

·  закрытие файлового потока

fclose(FILE * stream);

·  вывести буфер потока

int fflush(FILE * stream );

·  вывести буферы всех потоков

int fflushall( );

·  переименование (возвращается  0 в случае успеха, 1 – в случае ошибки)

int rename (const char* oldname, const сhar* newname);

·  удаление файла

int remove (const char* filename);

Строко-ориентированный ввод/ вывод

·  чтение одного символа из заданного потока. В случае успеха возвращается значение символа. В случае ошибки или если указатель файлового потока находится за его концом, возвращается EOF.