как проверить наличие символа «возврат» в C - PullRequest
20 голосов
/ 06 декабря 2010

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

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

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

не работает.

Ответы [ 5 ]

27 голосов
/ 06 декабря 2010

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

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

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

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

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

1 голос
/ 07 сентября 2016

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

1 голос
/ 06 декабря 2010

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

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

0 голосов
/ 27 мая 2015

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

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

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

Кстати, попробуйте '\ 0' перед любым символом. Не уверен, что это делает, но он останавливает весь код после него. Это как возврат 0; линия

0 голосов
/ 06 декабря 2010

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

...