Что такое getch c
Использование функции getch() в C/C++
Рассмотрим использование функции getch() в C/C+, которая позволяет прочитать ввод символов с клавиатуры.
Основной синтаксис
Хотя это не является частью стандарта C, но это все же функция POSIX C. Таким образом, мы все еще можем использовать эту функцию в Windows/Linux/Mac.
Ниже мы рассмотрим использование этой функции на нескольких примерах, а сам синтаксис функции довольно простой.
Эта функция принимает один символ из стандартного входа ( stdin ) и возвращает целое число.
Эта функция не принимает никаких параметров.
Например, если мы введем символ 0 в качестве входа, программа вернет значение ASCII 0, которое равно 49.
Теперь в C/C++ мы можем напрямую преобразовать символ в целое число. Таким образом, при приведении типов, значение ASCII 49 будет приведено к значению символа 0.
Давайте теперь посмотрим на некоторые примеры.
Примеры использования getch()
В качестве простого примера давайте сначала рассмотрим чтение одного символа.
Мы получим такой вывод после того, как нажмем «а» на своей клавиатуре.
Теперь посмотрим на программу, которая ждет 5 символов с клавиатуры.
Давайте отобразим полную строку только после того, как получим все 5 символов.
Таким образом, когда мы набираем «Hello», мы получаем правильный вывод.
Обратите внимание, что в выходной строке 6 символов, так как нам нужно зарезервировать 1 байт для ‘\0‘, т.е. op будет «Hello\0».
Мы узнали как использовать функцию getch() в C / C++ для получения символьного ввода с клавиатуры. Для получения более подробной информации о Си и Си++ вы можете посмотреть наш раздел по программированию на С++.
_getche, _getwche
Получает символ из консоли с отображением.
Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
Возвращаемое значение
Возвращает считанный символ. Ошибки не возвращаются.
Комментарии
Функции _getche и _getwche считывают один символ из консоли с эхо-выводом, то есть символ отображается в консоли. Эти функции нельзя использовать для считывания сочетания CTRL+C. При считывании функциональной клавиши или клавиши со стрелкой каждая из этих функций должна вызываться дважды. Первый вызов возвращает 0 или 0xE0, а второй вызов возвращает фактический код клавиши.
Эти функции блокируют вызывающий поток, поэтому они потокобезопасны. Описание неблокирующих версий см. в разделе _getche_nolock, _getwche_nolock.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
Процедура Tchar.h | _UNICODE и _MBCS не определены | _MBCS определено | _UNICODE определено |
---|---|---|---|
_getche | _getche | _getch | _getwche |
Требования
Подпрограмма | Обязательный заголовок |
---|---|
_getche | |
_getwche | или |
Дополнительные сведения о совместимости см. в разделе Compatibility.
Получает символ из консоли без отображения.
Этот API нельзя использовать в приложениях, выполняемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
Возвращаемое значение
Возвращает считанный символ. Ошибки не возвращаются.
Комментарии
_getch Функции и _getwch считывают один символ из консоли без вывода символа. Эти функции нельзя использовать для считывания сочетания CTRL+C. При считывании функциональной клавиши или клавиши со стрелкой каждая из этих функций должна вызываться дважды. Первый вызов возвращает 0 или 0xE0, а второй вызов возвращает фактический код клавиши.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.
Универсальное текстовое сопоставление функций
Tchar.h ассемблер | _UNICODE и _MBCS не определено | _MBCS определяется | _UNICODE определяется |
---|---|---|---|
_gettch | _getch | _getch | _getwch |
Требования
Подпрограмма | Обязательный заголовок |
---|---|
_getch | |
_getwch | или |
Дополнительные сведения о совместимости см. в разделе Compatibility.
Difference between getc(), getchar(), getch() and getche()
All of these functions read a character from input and return an integer value. The integer is returned to accommodate a special value used to indicate failure. The value EOF is generally used for this purpose.
getc():
It reads a single character from a given input stream and returns the corresponding integer value (typically ASCII value of read character) on success. It returns EOF on failure.
getchar():
The difference between getc() and getchar() is getc() can read from any input stream, but getchar() reads from standard input. So getchar() is equivalent to getc(stdin).
getch():
getch() is a nonstandard function and is present in conio.h header file which is mostly used by MS-DOS compilers like Turbo C. It is not part of the C standard library or ISO C, nor is it defined by POSIX (Source: http://en.wikipedia.org/wiki/Conio.h)
Like above functions, it reads also a single character from keyboard. But it does not use any buffer, so the entered character is immediately returned without waiting for the enter key.
Syntax:
getche()
Like getch(), this is also a non-standard function present in conio.h. It reads a single character from the keyboard and displays immediately on output screen without waiting for enter key.
This article is contributed by Vankayala Karunakar. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Что такое getch c
Стандартные библиотеки C содержат набор функций, предназначенных для работы с клавиатурой. Эти функции повторяют и немного дополняют возможности функций MS-DOS и BIOS, обслуживающих клавиатуру.
Функции getch и getche
Функция getch имеет следующий прототип:
Эта функция возвращает код ASCII символа, прочитанного из клавиатурного буфера, причем прочитанный символ не отображается на экране. Если была нажата функциональная клавиша или клавиша перемещения курсора, функция возвращает 0. В этом случае функцию надо вызвать еще раз для получения расширенного кода ASCII нажатой клавиши.
Если клавиатурный буфер пуст, программа переводится в состояние ожидания.
Функция getche полностью аналогична функции getch, за исключением того, что прочитанный символ отображается на экране. Приведем прототип функции getche:
Программа KBDASCII
Приведем исходные тексты программы KBDASCII, отображающей на экране коды ASCII и расширенные коды ASCII нажимаемых клавиш (листинг 2.4).
Листинг 2.4. Файл kbdascii\kbdascii.c
Функция kbhit
Для проверки буфера клавиатуры на наличие символов можно использовать функцию. Она также описана в файле conio.h:
Если буфер клавиатуры не пуст, функция возвращает ненулевое значение. В этом случае программа может прочитать символы из буфера клавиатуры при помощи фукнкций getch и getche. Если буфер клавиатуры пуст, функция возвращает нулевое значение.
Программа KBDHIT
Приведем исходный текст программы KBDHIT (листинг 2.5), ожидающей, когда пользователь нажмет на любую клавишу. Во время ожидания программа выводит на экран поочередно символы » «.
Листинг 2.5. Файл kbdhit\kbdhit.c
Функция cgets
Для ввода с клавиатуры строки символов можно использовать функцию cgets, работающую аналогично функции 0Ah прерывания MS-DOS INT 21h:
Функция cgets описана в файле conio.h.
После завершения ввода второй элемент массива buffer[1] будет содержать длину введенной строки, сама строка будет завершаться символами новой строки NL, перевода строки LF и нулем.
Функция cgets возвращает указатель на начало введенной строки в буфере, то есть на третий элемент массива buffer[2].
В следующем фрагменте программы функция cgets используется для ввода целого числа:
Функция gets
Существует и более удобная по сравнению с cgets функция, предназначенная для ввода строки с клавиатуры, а точнее, из стандартного потока ввода. Это функция gets:
Функция gets описана в файле stdio.h.
Эта функция читает строку из стандартного потока ввода stdin и запоминает ее в буфере buffer. Символ новой строки \n в конце введенной строки функция заменяет на нуль. После завершения ввода функция возвращает указатель на заполненный буфер или NULL в случае ошибки или условия «Конец файла».
Обратим ваше внимание на отличия между функциями cgets и gets:
· Функция cgets позволяет редактировать вводимую строку символов, функция gets просто записывает в буфер все символы подряд (в том числе и коды клавиш редактирования).
· Программе, использующей для ввода с клавиатуры функцию cgets, недоступны средства переназначения ввода операционной системы. Если же программа использует функцию gets, которая читает строку из стандартного потока ввода, можно использовать средства переназначения.
· Перед вызовом функции cgets необходимо специальным образом подготовить буфер для вводимой строки (записать в первый байт буфера длину вводимой строки). Функция gets не требует никакой подготовки буфера.