Этапы разработки программы. Разработка или выбор алгоритма решения поставленной задачи. Оформление документации на программу, страница 34

- форматированный.

Наиболее распространенным способом ввода\вывода при работе с файлами на Си является неформатированный ввод\вывод. При использовании этого способа чтение или запись файл производится байтовыми блоками определенного размера.

1. Неформатированный ввод\вывод.

Неформатированная запись данных в поток:

int fwrite(void *buf, int size, int count, FILE *stream);

Функция записывает <соunt> записей, каждая размером size байтов из области *buf в выходной поток stream. Указатель файла, связанный с потоком stream увеличивается на количество записанных байт. Функция возвращает количество явно помещенных в файл записей, т.е. если возвращаемое значение будет <count>, то была ошибка.

Неформатированное чтение данных из потока.

int fread(viod *buf, int size, int count, FILE *stream);

Функция читает <count> элементов данных, каждый размером size байт из выходного потока stream и помещает в область buf. Указатель файла увеличивается на число прочитанных байт. Функция возвращает количество реально прочитанных элементов, которое может быть<соunt>, если имела место ошибка, или встретился конец файла, раньше, чем было прочитано count элементов.

2. Символьный ввод \вывод.

Чтение — запись символа.

int fgetc(FILE *stream) — функция читает один символ из указанного файла с текущей позиции, далее это значение приводится к типу int и указатель файла перемещается на следующий символ. Возвращает EOF, если произошла ошибка или достигнут конец файла.

int fputc(char ch, FILE *<имя файловой переменной>) — символ ch записывается в указанный выходной поток. Если запись произошла успешно возвращается значение ch целого типа, иначе EOF.

Чтение — запись строки.

char * fgets(char *s, int n, FILE * stream) — читает строку из указанного входного потока и помещает по адресу з. Символы читаются из файла до тех пор, пока не будет прочитан символ новой строки, который включается в строку s или пока не будет достигнут конец потока, или пока не будет прочитано (n-1) символов; результат помещается в строку s и завершается строка символом '\0'. Если считывание произошло успешно, то возвращается адрес строки s, иначе NULL.

int fputs(char *s, FILE *stream) — функция копирует строку s в указанный поток, причем '\0' отбрасывается. Если при записи возникает ошибка, функция возвращает признак EOF, иначе последний записанный символ.

3. Форматированный ввод/вывод.

Запись данных в поток по формату.

int fprintf(FILE *stream, char ~<форматная строка>[,<аргумент>]);

Функция выполняет форматные преобразования данных, предназначенных для вывода н-нечати- последовательности символов в выходной поток. Каждый аргумент преобразуется и выводится согласно формату преобразования, определенному в форматной с оке. Вид форматной строки смотреть в функции printf) Функция возвращает количество записанных символов.

Чтение из потока по формату.

int fscanf(FILE ~stream, char * formatstring[,<аргумент>])

Функция читает данные из указанного входного потока, выполняет форматные преобразования и полученное значение записывает в переменные, адреса которых задаются последним параметром. Форматная строка имеет вид, что и у scanf. Функция возвращает количество успешно прочитанных элементов вша, или признак EOF, если достигнут конец файла.

    Стандартные потоки.

Когда программа начинает выполняться, автоматически открываются, пять потоков, из которых основными являются:

-  стандартный поток ввода (на него ссылаются, используя предопределенный указатель на поток stdin);

-  стандартный поток вывода (stdout);

-  стандартный поток вывода сообщает об ошибках (stderr)

По умолчанию стандартному потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout и stderr – экран дисплея.

Для вв/выв с помощью стандартных потоков в библиотеке яз.С определены следующие функции:

-  getch()/putch()

-  gets()/puts()

-  scanf()/printf()