从键盘读取输入而不按回车[重复]

Posted

技术标签:

【中文标题】从键盘读取输入而不按回车[重复]【英文标题】:reading input from the keyboard without pressing enter [duplicate] 【发布时间】:2012-12-23 01:28:42 【问题描述】:

可能重复:C/C++: Capture characters from standard input without waiting for enter to be pressedHow do you do non-blocking console I/O on Linux in C?

我正在尝试用 C 语言编写一个处于恒定循环中的程序,但我需要能够在每个循环开始时接收来自键盘的输入,或者如果没有按下任何键则继续。

getchar() 和 _getch() 是不够的,因为它们都在等待输入。如果有人知道类似于 _getch 但不等待输入的函数,将不胜感激。

【问题讨论】:

您的代码将在哪个系统上运行? 发布您尝试过的代码.. C 不假定您的键盘设备具有此功能。如果您知道自己的事实,则必须使用某些特定于平台的功能来共享此知识。 【参考方案1】:

没有 C 标准的方式来做你想做的事(从键盘捕获击键而无需用户按 Enter),你必须特定于平台。 <conio.h> 在 Windows 上应该有你需要的东西,在 Linux 上你需要curses 来获得它。 (我怀疑curses 也可以在 Mac 上运行,但不要引用我的话)

在 Windows 上,kbhit() 不等待任何输入,它只会在您进行测试的那一刻有按键按下时返回。如果您还需要知道密钥是什么,则可以将其与 getch() 结合使用

类似:

while(countdown++ <= 1000)  // give a second to hit something
    if(b=kbhit())            // if the user presses a key
        break;               // leave the loop early
    Sleep(1);                // else, sleep for 1 ms and try again

if (b != 0)          // if something was pressed
    printf("The key was %d\n", getch());

【讨论】:

以上是关于从键盘读取输入而不按回车[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C++:使用程序集询问用户输入而不按回车? [复制]

从 UITextField 保存文本数据而不按其他键(需要帮助)

使用输入管道和管理键盘

如何在不按 Enter C# WPF 的情况下检测我的键盘

scanf()函数分析

在python中,应如何捕获用户键盘输入?