ФУНКЦИИ ВВОДA-ВЫВОДА
Средства ввода-вывода не являются составной частью языка Си. Имеется ряд библиотечных функций Си. обеспечивающих стандартною систему ввода-вывода для программ на Си. Макроопределения, описания переменных и определения этих функций содержатся в файле стандартных заголовков stdio h Поэтому, как указывалось выше, каждая пользовательская программа должна содержать в начале ссылку
#include <stdio.h>.
В примерах программ мы неоднократно использовали форматные функции ввода (scanf()) и вывода (printf()). Набор стандартных функций ввода и вывода значительно шире и включает большое число функций для работы с данными различного типа, различными устройствами, буферизованного и небуферизованного, форматного и бесформатного ввода и вывода.
Система ввода-вывода Си обеспечивает некоторый уровень абстракции между программистом и используемым устройством. Эта абстракция называется потоком, а фактическое устройство ввода-вывода называется файлом. Буферизованная файловая система преобразует каждое физическое устройство в логическое устройство,называемое потоком. Существуют потоки двух типов: текстовые и двоичные.
Текстовый поток - это последовательность символов, которая организуется в строки, завершающиеся символами новой строки. Обработка текстового потока предполагает преобразование данных из текстового (внешнего) представления в машинное (внутреннее) или наоборот. При обработке двоичного потока последовательность его байтов взаимно однозначно соответствует байтам во внешнем устройстве.
В языке программирования Си файл - это логическое понятие, которое система может относить к чему угодно (от дисковых файлов до терминалов). Поток связывается с конкретным файлом выполнением операции «открыть» Как только файл открывается, можно обмениваться информацией между ним и программой. Закрытие выводимого потока заставляет ЭВМ записывать содержимое этого потока на внешнее устройство Этот процесс обычно называется промыванием потока. В начале выполнения программы ЭВМ открывает три предопределенных текстовых потока stdin, stdout и stderr, связанных со стандартными устройствами ввода-вывода (консоль - клавиатура и дисплей). Допускается переадресация ввода-вывода к другим устройствам.
Простейшими функциями консольного ввода-вывод являются функцияgetche(),которая читает символ с клавиатуры, и функция putchar(), которая печатает символ на экране. Функция getche() ждет, пока не будет нажата клавиша, а затем возвращает ее значение, автоматически выдавая на экран «эхо» нажимаемой клавиши. Функция putchar() записывает ее символьный аргумент на экран в текущуюпозицию курсора.
Ниже приводится пример простой программы, которая принимает один символ с клавиатуры и выводит его на экран.
Программа 106
#include<stdio.h>
main()
(
char ch;
ch = getchar() ;
putchar(ch);
)
Есть две важные версии функции getche(). Первая – getchar()- буферирует ввод до тех пор, пока не введен возврат каретки. Второй версией является функция getch(), которая работает точно так же, как getchar(), за исключением того, что getch() не возвращает на экран эхо введенного символа.
Функции gets() и puts() позволяют читать и писать цепочки символов (строки) с консоли. Функция gets() читает цепочку символов, которая вводится с клавиатуры (ввод оканчивается возвратом каретки), помещает ее с адреса, который указывает ее аргумент - указатель символа. Функция puts() выводит на экран ее аргумент - цепочку символов, а затем символ новой строки. Например, нижеследующая программа читает цепочку в массив str и тут же печатает ее.
Программа 107
main ()
(
char str[80] ;
gets (str) ;
puts(str) ;
)
Функция puts() занимает меньше памяти и работает быстрее, чем printf() при выводе символьных цепочек, поэтому программисты часто используют функцию puts() в тех случаях, когда важно иметь высоко минимизированныйкод.
Таблица 3.4
Дата добавления: 2015-06-05; просмотров: 627;