23

我想知道如何检查用户是否键入了“退格”字符。

getch() function i.e. "key = getch()"在我的 C 程序中使用,我想检查何时按下退格键。该行:

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

不起作用。

4

5 回答 5

29

阅读的问题Backspace在于,大多数终端都被“煮熟”了,因为退格等键是由终端驱动程序处理的。但是,curses 函数getch()可以读取退格,因为它不绑定到终端。

编辑

我刚刚注意到您的代码用于输入getch()。我运行了一个小测试程序,getch()当你按下退格键时返回 127。因此尝试:

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

另请注意,您的示例代码在应该使用相等运算符时使用了赋值运算符===

于 2010-12-06T04:57:20.277 回答
1

i/o 流的类型可能会有所帮助。标准输入流是一种行缓冲流,在您向其中写入 '\n' 字符之前不会刷新。在缓冲区满之前,完全缓冲的流永远不会刷新。如果您在完整的 buff 流中写入退格键,则可能会捕获 '\b'。

参考unix环境优势方案。

于 2010-12-06T05:14:29.253 回答
1

您没有说该getch()函数来自哪个库(它不是 C 标准的一部分),但如果它是来自 ncurses 的库,您可以检查keyagainst的值KEY_BACKSPACE

于 2016-09-07T06:57:49.057 回答
0

试试这个:

#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 一样?线?

于 2015-05-27T16:25:01.987 回答
-4

我相信系统输入驱动程序是行缓冲的。所以它在标准C中是不可能的。

于 2010-12-06T04:54:34.097 回答