我想知道如何检查用户是否键入了“退格”字符。
我getch() function i.e. "key = getch()"
在我的 C 程序中使用,我想检查何时按下退格键。该行:
if(key = '\b') { ....
不起作用。
阅读的问题Backspace在于,大多数终端都被“煮熟”了,因为退格等键是由终端驱动程序处理的。但是,curses 函数getch()
可以读取退格,因为它不绑定到终端。
我刚刚注意到您的代码用于输入getch()
。我运行了一个小测试程序,getch()
当你按下退格键时返回 127。因此尝试:
if (key == 127 || key == 8) { ... /* Checks for both Delete or Backspace */
另请注意,您的示例代码在应该使用相等运算符时使用了赋值运算符=
==
i/o 流的类型可能会有所帮助。标准输入流是一种行缓冲流,在您向其中写入 '\n' 字符之前不会刷新。在缓冲区满之前,完全缓冲的流永远不会刷新。如果您在完整的 buff 流中写入退格键,则可能会捕获 '\b'。
参考unix环境优势方案。
您没有说该getch()
函数来自哪个库(它不是 C 标准的一部分),但如果它是来自 ncurses 的库,您可以检查key
against的值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 或查找 C 标准库的 ctype.h 头文件的函数。
你得到输入很好。谢谢你的信息。我只是在查找退格代码并发现了这个问题。
顺便说一句,在任何字符之前尝试 '\0'。不知道那是做什么的,但它会停止它之后的所有代码。是不是像 return 0 一样?线?
我相信系统输入驱动程序是行缓冲的。所以它在标准C中是不可能的。