Ввод / вывод

Ввод / вывод связан с работой с файлами. Стандартные функции ввода / вывода находятся в файле stdio, который включается в программу следующей строкой

# include <stdio.h>

Участвующие в работе программы файлы определяются в ее начале вместе с переменными. При этом тип файла определяется так

FILE*fp,

где fp является указателем на файл.

Перед работой файл должен быть открыт следующей функцией

fp= fopen (file _ name, mode),

в котором file _ name строка, содержащая имя файла в том виде, в котором он записан в каталоге.

Mode – символы, определяющие режим открытия файла.

Существуют следующие режимы открытия файла:

r – чтение файла, w – запись в файл, a – пополнение файла, w+ - обновление файла с усечением, r+ - обновление файла без усечения, b – открытие файла в двоичном режиме (возможны комбинации с предыдущими режимами, например “rb”), t – файл открывается в текстовом режиме (также возможны спецификации типа “rt”).

В случае невозможности открытия файла функция fopen() возвращает нуль. Примером открытия файла может быть следующая функция

fp = fopen (²C: // ppf // zao/pcx²,²rb²) –

файл zao.pcx, который находится на диске С под директорией ppt открывается для двоичного чтения.

Закрытие (отключение от программы) файла осуществляет функция

fclose (fp)

В языке Си существуют следующие вводы/выводы информации

а) посимвольный;

б) построчный;

в) блочный;

г) форматный.

Посимвольный ввод.

Простейшим механизмом ввода является – чтение одного байта (символа) функцией int geteh (void) из клавиатуры.

В данной функции ключевое слово void означает, что не осуществляется передача параметров.

Функция

Int fgete (FILE *p)

Возвращает символ из открытого файла, описанного переменной типа FILE, на которую указывает fp.

Функция

Ungete (int ch, FILE * fp)

Возвращает символ int ch назад в поток fp.

Приведенные функции в случае ошибки или исчерпания файла возвращают EOF.

Посимвольный ввод.

Функция

Int fputchar (int ch)

Помещает символ ch в файл стандартного вывода stolout.

Функция

Int fputc (int ch, FILE * fp)

Помещает ch в файл fp. Здесь fp – указатель файла. Аналогичные действия выполняют функции putchar и fputc.

В случае ошибки вывода возвращается EOF.

Построчный ввод.

Функция

Char * gets (char * string)

Принимает байты со стандартного ввода stdin и размещает их по адресу, задаваемому указателем string. Прием символов прекращается при получении символа '/ n' (нажатие клавиши ENTER).

Функция

Char * gets (char * string, int n, FILE * fp)

Принимает байты из файла, описанного именем типа FILE, на который указыввает fp и размещает их по адресу, указанному переменной string. Прием символов прекращается по достижении передачи n символов или при достижении '/n'.

Построчный вывод.

Функция

int fputs (char * s, FILE * fp)

перемещает байты из строки S в файл fp. Перенос завершается по достижении символа '/o'.

Функция

Int puts (char * s)

Переносит байты из строки S в стандартный вывод. Вывод завершается по достижении символа '/o'.

Блоковый вывод.

Функция

Int read (void * ptr, int size, intn, FILE * fp)

Считает n элементов размером size, байт в область памяти, определяемую указателем ptr, из открытого файла, описываемого переменной типа FILE, на которую указывает fp.

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

Функция

Int getw (FILE *fp)

Возвращает число байт типа int, считанное из открытого файла, описываемого переменной типа FILE, на которую указывает fp.

Блоковый вывод.

Функция

Int fwrite (void * ptr, int size, int n, FILE * fp)

Записывает в файл с указателем fp n элементов из области памяти, определенной указателем ptr.

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

Функция

Int scanf (char * format [, указатель]…)

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

Функция

Int fscanf (FILE * fp, char * format [, указатель]…)

осуществляет ввод данных с файла, определенного переменной, на которую указывает fp.

Функция

Int sscanf (char * buffer, char * format [, указатель]…)

Читает из стринга, на который указывает buffer согласно формату format и рассылает полученные значения в аргументы, которые должны быть соответствующими указателями. По исчерпании файла функции сообщают EOF.

Форматный вывод осуществляется функциями

Int printf (char * format, аргумент…)

Int printf (FILE * fp, char * format, аргумент…)

Int printf (char * buffer, char * format, аргумент…)

Все приведенные функции преобразуют, форматируют и печатают свои аргументы. Первая осуществляет стандартный вывод, вторая вывод содержимого в файл, который указывается fp, а третья осуществляет вывод вbuffer.

В форматном вводе/выводе спецификация преобразования имеет вид

% [флаг][ширина] [точность] [размер] тип

В таблице 6 приведена спецификация преобразования для функции print

Элемент Специфика- Ции   Производимый эффект
Флаги  
- + пробел # Производится выравнивание влево выводимого числа в пределах выделенного поля. Правая сторона выделенного поля дополня­ется пробелами. По умолчанию устанавливвается выравнивание ввправо Выводится знак числа ¢-¢ или ¢+¢ Выводится пробел перед числом, если оно положительно. Для отрицатель­ных чисел знак ¢-¢ выводится всегда Выводится идентификатор системы счисления для целых чисел: - 0 перед числом, выводимым в восьмеричной с/с; - 0х или 0Х для чисел, выводимых в шестнадцатеричной с/с; - ничегодля чисел, выводимых в десятичной с/с. Выводится десятичная точка для чисел типа float
Ширина Воздействует только на вывод
N 0n * Определяет минимальную ширину поля в n символов. Если после преобразования ширины недостаточно, выводится столько символов, сколько есть. Незаполненные позиции дополняются пробелами Все то же самое, но позиции слева для целого числа дополняются нулями Следующий аргумент из списка аргументов задает ширину
Точность Воздействует только на вывод
Ничего .0 .n * Точность по умолчанию Для d, i,o, u, x точность по умолчанию. Для e, E, f десятичная точка отсутствует Для e, E, f не более n знаков после точки Следующий аргумент из списка аргументов – точность
Модификатор Воздействует там, где применимо
F N h l Аргумент рассматривается как far – указатель Аргумент рассматривается как nead – указатель Для d, i, o, u, x, X аргумент является short int Для d, i, o, u, x, X аргумент является long int Для e, E, f, g, G аргумент является double (ттолько для scanf)
Тип преобразования Производимый эффект
С d i o u x X F E E g G S Тип переменной: CHAR При вводе из файла читается и передается переменной один байт. При выводе переменная преобразуется к типу char. В файл передается один байт. Тип пременной: INT Десятичное int со знаком Десятичное int со знаком Восьмеричное int unsigned Десятичное int unsigned Шестнадцатеричное int unsigned; при выводе для числа используются символы 0 - f Шестнадцатеричное int unsigned; при выводе для числа используются символы 0 – F При вводе различия х и Х не оказывают ни какого эффекта Тип переменной: FLOAT Значение со знаком в форме [-] dddd.dddd Значение со знаком в форме [-] d.dddde [+|-] ddd Значение со знаком в форме [-] d.dddd [+|-] ddd При вводе нет различия между е и Е Значение со знаком в формате ¢е¢ или ¢f¢ в зависимости от значения и специфицированной точности Значение со знаком в формате ¢Е¢ или ¢F¢ в зависимости от значения и специфицированной точности При вводе нет различия между g и G Тип переменной: CHAR* При вводе принимает символы без преобразоввания до тех пор, пока не встретится ¢/n¢ или пока не достигнута специфицированная точность. В программу передаются символы до ¢/n¢ или пробела. При выводе выдает в поток все символы до тех пор, пока не встретится ¢/0¢ или пока не достигнута специфицированная точность


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



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