【问题标题】:Capturing a user's "enter" keystroke in C在 C 中捕获用户的“输入”键击
【发布时间】:2012-04-06 23:00:37
【问题描述】:

我现在开始学习 C,我试图弄清楚当用户点击“回车”时我将如何进行捕获。我特别关注 scanf 和 getc 函数,但我不太确定如何去做。当用户按回车键时,我想在等待/观看他再次按回车键时执行一些操作......“输入”是来自控制台的换行符吗?任何建议将不胜感激!

【问题讨论】:

  • 如果你从用户那里得到一些输入,例如scanf()它的阻塞。因此,在用户键入输入并按下 Enter 后,PC 会自动转到程序的下一行。你可以在那里输入你的代码

标签: c


【解决方案1】:

您可以使用 fgetc() 检查 ascii 值。

while(condition) {
    int c = fgetc(stdin);

    if (c==10) {//Enter key is pressed
    //your action
    }
}

【讨论】:

  • 虽然这是一个好方法,但如果应用程序需要用户输入一些输入,这将不起作用。
  • @noMAD 我明白你的意思。但是,OP 的工作是解释他需要在什么情况下工作。否则,我希望 OP 根据他的需要进行修改。
【解决方案2】:

如果您只需要在用户按 Enter 作为输入时输入,您可以使用 scanfgetchar。这是来自cplusplus.com 的示例

/* getchar example : typewriter */
#include <stdio.h>

int main ()
{
  char c;
  puts ("Enter text. Include a dot ('.') in a sentence to exit:");
  do {
    c=getchar();
    putchar (c);
  } while (c != '.');
  return 0;
}

此代码将您输入的内容打印到标准输入(终端窗口)。

但是,如果您不想要输入(我知道这对于新学习者来说确实不必要且复杂),您应该使用事件处理程序。

【讨论】:

    【解决方案3】:
    printf("Hit RETURN to exit"\n");
    fflush(stdout);
    (void)getchar();
    

    参考:comp.lang.c FAQ list · Question 19.4b

    【讨论】:

      【解决方案4】:

      C 语言是独立于平台的,它本身没有任何键盘交互。当您编写控制台程序时,控制台会处理键盘输入,然后将其作为标准输入传递给您的程序。控制台输入/输出通常是缓冲的,因此您无法对单个按键做出反应,因为控制台仅在每行之后将输入发送到程序。

      但是!如果您不要求控制台应用程序独立于平台,则在某些 Windows 编译器中有一个非标准库 &lt;conio.h&gt; 有一个名为 getche(); 的函数,它完全符合您的要求 - 等待来自控制台,返回被按下的char

      【讨论】:

        猜你喜欢
        • 2011-05-12
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 2022-07-01
        • 1970-01-01
        • 2018-12-08
        相关资源
        最近更新 更多