#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()
это ужасно сломанные и непригодные для большинства систем (сообщает о том, что каждый отдельный байт многобайтовой символьной печати не сам по себе, ведущий программного обеспечения предположить, что для печати многобайтных символов-это не для печати)?