Урок 6.1. Ввод-вывод символа

6.1 Ввод-вывод символа

Для чтения в программе одного символа, поступающего из стандартного входного потока, используется встроенная функция getchar(). Обращение к функции обычно производится в составе оператора-выражения, имеющего следующую форму записи:

<переменная> = getchar();

Функция getchar() аргументов не имеет. Она получает очередной символ, поступающий с устройства ввода, и возвращает его значение выполняемой программе. В результате обращения к функции getchar() полученный символ присваивается переменной типа char или int.

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

Для вывода символа в стандартный выходной поток используется функция putchar(). Обращение к функции имеет вид:

putchar(<переменная>);

Рассмотрим пример использования функций ввода-вывода символа:

#include <stdio.h>
main() {
int simvol;
 
while ((simvol = getchar()) != EOF)
         putchar(simvol);
}

В данном примере показано, как с помощью рассмотренных функций обеспечивается посимвольный ввод и вывод данных. Символы, полученные с клавиатуры, отображаются на экране дисплея. Обратите внимание на то, что переменная simvol имеет тип int. Так сделано потому, что значениями переменных типа char являются целые числа без знака в диапазоне от 0 до 255 (ASCII коды символов), но в то же время признак EOF, как уже указывалось, имеет числовое значение –1, что недопустимо для переменной типа char.

Функция getchar() возвращает значение типа int и поэтому в состоянии реагировать на признак конца файла возвратом значения –1. В то же время тип int для переменной simvol не влияет на работу функции putchar() – она выводит на печать символ, код которого является значением аргумента (младший байт двухбайтового поля int).

Ввод данных с клавиатуры и передача их в программу может происходить различными способами. В одном случае вводимый символ немедленно поступает в программу, а в другом – вводимые символы накапливаются в некоторой области памяти, называемой буфером. Нажатие клавиши ВВОД приводит к тому, что символы, собранные в буфере, поступают в программу. Первый способ относится к небуферизованному, или прямому вводу, а второй служит примером буферизованного ввода.

Для буферизованного ввода можно отметить, по меньшей мере, два положительных момента. Во-первых, оказывается, что передачу нескольких символов в виде одного блока можно осуществить гораздо быстрее, чем передавать их последовательно по одному. Во-вторых, если при вводе символов будет допущена ошибка, вы можете воспользоваться корректирующими средствами терминала, чтобы ее исправить, и только после этого передать данные программе, нажав клавишу ввод. Рассматриваемая функция getchar() обеспечивает буферизованный ввод.

Функция открывает входной поток данных и символы, вводимые с клавиатуры, поступают в системный буфер ввода (размер буфера 127 байтов) до тех пор, пока не будет нажата клавиша ввод. После того, как нажата клавиша ввод, функция передает в программу первый символ из буфера, при втором обращении к функции передается второй символ и т.д., пока не будут переданы все символы из буфера.

В вышеприведенном примере обращение к функции getchar() стоит в цикле, и на экране будут дублироваться символы текста, вводимого с клавиатуры. Чтобы прекратить работу программы нужно, ввести признак конца файла – EOF. На клавиатуре это делается одновременным нажатием клавиш Ctrl и Z (Ctrl+Z).

Вместе с тем, существуют различного рода программы, для которых буферизованный ввод неприемлем. Это касается программ, для которых нажатие клавиши обозначает определенную команду. В таких программах целесообразно использовать, например, функцию getch(), которая аналогична функции getchar(), но предназначена для прямого ввода.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов