我使用的是C.我写了一个非常simpe程序,打印回输入,使用的getchar()和的putchar()或printf()函数。 有没有什么办法,以使其尽快用户键入一个键,该程序注册它做好,而无需等待输入? 让我展示:
目前,如果用户键入“ABC”,然后按下回车键,该程序打印“ABC”和换行,并继续等待更多的输入。 我想使其尽快使其在用户输入“A”,该程序打印“一”,并等待更多的输入。 我不知道这是否具有源代码里面做,或者如果事情已经在Windows命令行来改变。
为以防万一,这里的源代码:
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
如果您使用Visual Studio中,有一个库调用conio( #include <conio.h>
其限定的kbhit()函数和的getch)()。
否则,在Windows上,还有使用从Windows SDK(ReadConsoleInput()等)功能的可能性,但这需要一点点的代码(尽管,一旦完成,如果处理得当,它可以重复使用任何时间你想)
如果你正在使用Visual Studio,您可以用getch()
在这个简单的例子,其他的答案应该适合你罚款。
一般的解决方法是禁用行缓冲。 这取决于特定的控制台上; 下面的例子是Windows的唯一(未经测试):
#include <windows.h>
int main() {
HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hConsole, &mode);
SetConsoleMode(hConsole, mode & ~ENABLE_LINE_INPUT);
// ...
}
我认为标准C库函数在以下方面实现ReadConsole
和朋友; 如果不是,这甚至可能没有工作。 (我目前在Linux上,所以我不能对此进行测试。)
在Linux上,你可以接管终端:
#include <stdio.h>
#include <ctype.h>
#include <termios.h>
system("stty raw"); /* raw output to terminal, direct feedback */
system("clear"); /* clear screen */
printf("Press a key");
answer = getchar();
system("stty cooked"); /* revert back*/
文章来源: Is there a way to get text as soon as possible without waiting for a newline?