как проверить символ "backspace" в C

Я хотел бы знать, как проверить, вводит ли пользователь символ "backspace".

Я использую getch() function i.e. "key = getch()" в моей программе C, и я хотел бы проверить, когда backspace нажата. строка:

 if(key = 'b') { ....

не работает.

5 ответов


проблема с чтением Backspace заключается в том, что большинство терминалов "варятся" в том, что ключи, такие как backspace, обрабатываются драйвером терминала. Однако функция curses getch() можно прочитать backspace, поскольку он не привязан к терминалу.

редактировать

Я только что заметил ваш код is используя getch() для ввода. Я запустил небольшую тестовую программу и getch() возвращает 127 при нажатии backspace. Поэтому попробуйте:

if (key == 127 || key == 8) { ... /* Checks for both Delete or Backspace */

также обратите внимание, что ваш пример кода использует задание оператор = когда он должен использовать равенство оператор ==


тип потока ввода-вывода может помочь. Стандартный входной поток-это своего рода поток с буферизацией строк, который не очищается, пока вы не напишете в него символ "\n". Полный буферизованный поток никогда не смывается, пока буфер не заполнен. Если вы пишете backspace в полном потоке buff, "\b " может быть захвачен.

ссылка на программу преимуществ среды unix.


вы не сказали, что библиотека getch() функция исходит из (она не является частью стандарта C), но если это один из ncurses, вы можете проверить значение key против KEY_BACKSPACE.


попробуйте это:

#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.

хорошо, что вы получаете ввод. Спасибо всем за информацию. Я просто искал код backspace и нашел это вопрос.

BTW попробуйте '\0 ' перед любым символом. Не уверен, что это делает, но он останавливает весь код после него. Это похоже на строку return 0;?


Я считаю, что драйвер ввода системы буферизован. Так что это невозможно в стандарте C.