Подтвердить что ты не робот

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

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

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

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

не работает.

4b9b3361

Ответ 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.