【问题标题】:how to check for the "backspace" character in C如何检查C中的“退格”字符
【发布时间】:2010-12-06 04:47:32
【问题描述】:

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

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

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

没用。

【问题讨论】:

  • 您是否尝试过查看“键盘”功能?
  • @Andrew White:贝尔是\a
  • 你还需要两个等号==而不是=进行比较
  • @ephemient 我已更正,感谢您澄清这一点。

标签: c character backspace


【解决方案1】:

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

编辑

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

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

另请注意,您的示例代码使用 assignment 运算符 =,而它应该使用 equality 运算符 ==

【讨论】:

  • 令人困惑的是,“退格”的实际 ASCII 码是 8 (\b, ^H); 127 (^?) 是“删除”。键盘上标记为“退格”(或“删除”)的键是发送“8”还是“127”取决于终端应用程序中的设置。您可能需要同时检查两者。
  • @SiegeX 感谢您的回答。这很有帮助。此外,我对使用赋值运算符而不是相等运算符进行了纠正。干杯。
  • 如何让阴影框用 Markdown 表示一个键?
  • @Karl Knechtel 关键文本
【解决方案2】:

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

参考unix环境优势方案。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 不是“系统输入驱动”;它是另一个正在格式化程序输入的程序。
        猜你喜欢
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        • 2015-05-29
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        相关资源
        最近更新 更多