Как я могу обнаружить непечатаемый ввод в C?

#c

Вопрос:

Я пытаюсь обнаружить непечатаемые символы в C. Например, я хочу определить, вводит ли пользователь Control-B. Как мне это сделать в C?

Комментарии:

1. Я имею в виду в Linux извините, я забыл упомянуть

2. Ctrl-B-это символ. Вам нужно определить, что вы подразумеваете под «не-персонажем». Найдите isprint() функцию и обновите свой вопрос, если вам все еще нужна информация.

Ответ №1:

Поместите #include <ctype.h> в свой исходный файл. Затем, если у вас есть некоторая переменная x , содержащая код символа, вызов функции isprint((unsigned char) x) возвращает ненулевое значение (true) тогда и только тогда, когда символ является печатным символом. Возможно , вы предпочтете isprint((unsigned char) x) || isspace((unsigned char) x) включить вкладку, новую строку и возврат каретки. Однако он также включает в себя форму и вертикальную вкладку, поэтому вам может потребоваться вручную проверить наличие некоторых из этих символов.

На <ctype.h> тесты влияет языковой стандарт; они могут возвращать другие результаты, если вы измените языковой стандарт.

Если x является int и содержит значение , возвращаемое некоторыми стандартными библиотечными функциями, такими как getchar , вы можете опустить приведение unsigned char и просто использовать isprint(x) . В этом случае также можно передать его в эти тесты, если значение может быть EOF вместо символьного кода. ( EOF не будет ни в одном из классов символов; тесты вернут для него ноль.)

Комментарии:

1. Мы можем предположить, что большинство систем установленный язык (версия) UTF-8, и что isprint() это ужасно сломанные и непригодные для большинства систем (сообщает о том, что каждый отдельный байт многобайтовой символьной печати не сам по себе, ведущий программного обеспечения предположить, что для печати многобайтных символов-это не для печати)?