Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Консольный ввод/вывод

Консольный ввод/вывод относится к событиям, возникающим от клавиатуры или на экране. Поскольку ввод и вывод на консоль - это типичные операции, была создана подсистема файловой системы ввода/вывода ANSI С для работы исключительно с консолью. Эти функции направляют операции в стандартный ввод (stdin) и стандартный вывод (stdout) системы. Возможно перенаправить консольный ввод на другие устройства. Для простоты обсуждения предполагается, что консоль - это устройство, используемое стандартными способами.

ЗАМЕТКА: Ни С, ни С++ не предоставляют встроенную поддержку графического интерфейса пользователя, как Windows или Linux. При выполнении ввода или вывода в среде Windows или Linux требуется использование специальных функций, определенных в самой операционной системе.

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

Простейшей из стандартных функций ввода/вывода на консоль является getchar(), читающая символ с клавиатуры, и putchar() печатающая символ на экран в текущей позиции курсора. Тем не неменее getchar() имеет некоторые существенные ограничения, описываемые ниже. Поэтому большую часть времени мы будем использовать getche(), когда будет потребность в чтении символа. Функцию getche() определила фирма Borland (в стандарте ANSI С ее нет). Хотя это довольно, типичное расширение, функция «может не поддерживаться в других средах. getche() ожидает нажатия клавиши, а затем возвращает значение. Нажатие клавиши также приводит к выводу символа на экран. Ниже показаны прототипы функций getche() и putchar(): int getche(void); int putchar(int cb); Функция getche() возвращает нажатый символ. Функция putchar() возвращает cb в случае успеха или EOF - в случае ошибки. (EOF - это макроопределение, находящееся в stdio.h, означающее конец файла.) Хотя cb объявлена как целое, на экран выводится только младший байт. Аналогично, хотя getche() возвращает целое, только младший байт будет содержать символ, введенный с клавиатуры. Функция getche() требует заголовочный файл conio.h.

Следующая программа вводит символы с клавиатуры и выводит их в противоположном регистре. То есть прописные буквы будут выведены строчными, а строчные - прописными. Программа останавливается при обнаружении точки. /* переключатель регистра */ #include <conio.h> #include <stdio.h> #include <ctype.h> int main(void) { char ch; do { ch = getche(); if(islower(ch)) putchar(toupper(ch)); else putchar (tolower(ch)); } while (ch!='.'); /* использование точки для остановки */ return 0; }

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

Следующей, более полезной вариацией getche() является getch(), которая действует подобно getche(), за тем исключением, что она не выводит символ на экран. Можно использовать этот факт для создания программ-розыгрышей ничего не подозревающих пользователей. Программа показанная ниже, выводит стандартную подсказку операционной системы и ожидает ввода. Каждый символ, вводимый пользователем, отображается следующей буквой алфавита. То есть «А» станет «В» и так далее. Для остановки программы нажмите CTRL-A. /* данная программа выглядит так же, как подсказка командной строки. Она выводит подсказку, но каждый введенный пользователем символ заменяется на следующий символ алфавита*/ #include <stdio.h> #include <conio.h> int main(void) { char ch; do { printf("С:\"); for(;;) { ch = getch(); /* чтение символов без эха */ if(ch=='\r' || ch==1) { printf("\n"); break; } putchar(ch+1); } } while(ch!=1); /* выход no control-A */ return 0; }

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]