Простейшими консольными функциями ввода / вывода являются функции getchar() и getch(), считывающие символ с клавиатуры, и функция putchar(), выводящая символ на экран. Все эти функции имеют только один аргумент (параметр), что означает, что они могут отображать только один объект.
Функции getch() и getchar() возвращают целое число, в младшем байте которого содержится код символа, соответствующего нажатой клавише (старший байт содержит нулевое значение).
Если при вводе возникает ошибка, функции возвращают константу EOF (EOF равна -1).
Формат функций ввода выглядит так:
int getchar(void)
int getch(void)
Безразлично, к какому типу (char или int) мы отнесем вводимый символ, что обусловлено двойственностью символьных данных в языке С. Для сохранения введенной информации необходима операция присваивания, т.к. функции getch() и getchar() рассматриваются программой как значение введенной переменной.
Однако на этом сходство обеих функций кончается, далее остановимся на их отличиях. Функция getchar() вводит символ из потока, который имеет буфер на одну строку, поэтому она ничего не возвращает до тех пор, пока не будет нажата клавиша ENTER, кроме того, функция getchar() осуществляет эхопечать.
Функция getch() (библиотека conio) вводит символ с консоли без буферизации и эхопечати. Это означает, что символ доступен в программе сразу же после того, как он введен с клавиатуры.
Для того, чтобы записать информацию в переменную simbol1, после ввода первого символа необходимо нажать ENTER, второй значащий символ запишется в переменную simbol2 сразу после его ввода с клавиатуры. Причем первый введенный символ мы увидим на экране, а второй нет (при вводе). Разумеется, оба символа увидим после применения функции printf.
Следующий пример показывает посимвольную работу с текстом.
Пример 2. Ввести текст с клавиатуры, с признаком конца ввода считать точку. Подсчитать количество введенных символов.
# include <stdio.h>
void main()
{char z[100];
int i;
printf(“\n Napishite predlogenie c tochkoi v konse \ n”);
for (i=0; z[i] != ’.’; i++)
z[i]= getchar();
printf(“Kolichestvo simvolov= %d”, i);
}
Следует обратить внимание, что при работе с текстом, используя getchar(), мы не получаем строку символов, т.к. отсутствует признак конца строки ‘\0’. Для того, чтобы не нарушать стандартов языка, следует добавить символ ‘\0’ после окончания ввода текстовой информации.
void main()
{char z[100];
int i;
printf(“\n Napishite predlogenie c tochkoi v konse \ n”);
Итак, добавление ‘\0’ к массиву z[] превращает последовательность символов в строку.
Остановимся на двойственности символьных данных. Функции ввода/вывода для символьных данных были сконструированы таким образом, чтобы они могли работать и с целочисленными типами данных. Компилятор самостоятельно преобразует данные типа int в символы.
Пример 3. Двойственность символьных данных
void main()
{int letter;
letter = ‘G’;
putchar (letter);
}
Несмотря на то, что переменная letter определена как целочисленная, ей может быть присвоен символ. Программа при этом будет компилироваться и выполняться без ошибок. Право выбора, использовать переменные типа char или int, остается за программистом.
Рассмотрим функцию вывода символа на консоль - putchar(). Несмотря на то, что эта функция наряду с символами может получать и целочисленный аргумент, ей можно передавать только символьные значения. Иначе говоря, целочисленные значения трактуются как коды символов и, следовательно, на экран выводится только младший байт аргумента.
Функция putchar() возвращает либо код символа, либо константу EOF, если произошла ошибка. Формат функции putchar() выглядит так: