我正在使用C.我写了一个非常简单的程序,使用getchar()和putchar()或printf()打印输入。是否有任何方法可以在用户键入一个键时立即进行注册,程序会注册它,而无需等待Enter?让我说明一下:
目前,如果用户键入“abc”然后按Enter键,程序将打印“abc”和换行符并继续等待更多输入。我希望这样做,只要用户输入“a”,程序就会输出“a”并等待更多输入。我不确定是否必须在源代码中完成,或者是否必须在Windows命令行中更改某些内容。
以防万一,这是源代码:
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
答案 0 :(得分:3)
如果您使用的是Visual Studio,则会有一个名为conio(#include <conio.h>
)的库,它定义了kbhit()函数和getch()。
否则,在Windows上,仍然可以使用Windows SDK中的功能(ReadConsoleInput()等),但这需要更多的代码(尽管一旦完成,如果操作正确,它可以可以在任何时候重复使用)
答案 1 :(得分:1)
如果您使用的是Visual Studio,则可以使用getch()
。
答案 2 :(得分:0)
在这个简单的案例中,其他答案应该适合你。
一般解决方案是禁用行缓冲。这取决于特定的控制台;以下示例仅适用于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上,所以我无法测试它。)
答案 3 :(得分:0)
在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*/