Как проверить символ "backspace" в C
Я хотел бы знать, как проверить, не набирает ли пользователь символ "backspace".
Я использую getch() function i.e. "key = getch()"
в моей программе на C, и я бы хотел проверить, когда нажата кнопка backspace. строка:
if(key = '\b') { ....
не работает.
Ответы
Ответ 1
Проблема с чтением Backspace заключается в том, что большинство терминалов "приготовлено" в таких ключах, как backspace, обрабатывается драйвером терминала. Однако функция curses getch()
может читать обратное пространство, поскольку оно не привязано к терминалу.
Изменить
Я просто заметил, что ваш код использует getch()
для ввода. Я запускал небольшую тестовую программу, а getch()
возвращает 127, когда вы нажимаете backspace. Поэтому попробуйте:
if (key == 127 || key == 8) { ... /* Checks for both Delete or Backspace */
Также обратите внимание, что в вашем примере кода используется оператор присваивание =
, когда он должен использовать оператор равенство ==
Ответ 2
Может возникнуть тип потока ввода-вывода. Стандартный поток ввода - это тип потокового буферизованного потока, который не сбрасывается до тех пор, пока вы не напишите в него "\n" char. Полный буферный поток никогда не закрашивается, пока буфер не будет заполнен. Если вы напишете backspace в полном потоке баффа, можно будет зафиксировать "\ b".
Ссылка на программу преимуществ среды Unix.
Ответ 3
Вы не сказали, из какой библиотеки вызывается функция getch()
(она не является частью стандарта C), но если она из ncurses, вы можете проверить значение key
на KEY_BACKSPACE
.
Ответ 4
Попробуйте следующее:
#include <stdio.h> /* printf */
#include <ctype.h> /* isalpha isdigit isspace etc */
#define FALSE 0
#define TRUE 1
/* function declarations */
int char_type(char);
main()
{
char ch;
ch = 127;
char_type(ch);
ch = '\b';
char_type(ch);
return 0;
}
int char_type(char ch)
{
if ( iscntrl(ch) != FALSE)
printf("%c is a control character\n", ch);
}
Это полная программа, но она проверяет только контрольные символы.
Вы можете использовать его принципы, ваш выбор. Просто учитесь!
Смотрите: http://www.tutorialspoint.com/c_standard_library/ctype_h.htm или найдите функции для заголовочного файла ctype.h в стандартной библиотеке C.
Хорошо, что вы получаете вход.
Спасибо всем за информацию. Я просто искал обратный код и нашел этот вопрос.
BTW try '\ 0' перед любым char. Не уверен, что это делает, но он останавливает весь код после него. Это как возвращение 0; линия?
Ответ 5
Я считаю, что драйвер ввода системы буферизирован в строке. Поэтому его невозможно в стандартном C.