有没有一种方法,以尽快获取文本,而无需等待新行?(Is there a way to get tex

2019-09-03 11:27发布

我使用的是C.我写了一个非常simpe程序,打印回输入,使用的getchar()和的putchar()或printf()函数。 有没有什么办法,以使其尽快用户键入一个键,该程序注册它做好,而无需等待输入? 让我展示:

目前,如果用户键入“ABC”,然后按下回车键,该程序打印“ABC”和换行,并继续等待更多的输入。 我想使其尽快使其在用户输入“A”,该程序打印“一”,并等待更多的输入。 我不知道这是否具有源代码里面做,或者如果事情已经在Windows命令行来改变。

为以防万一,这里的源代码:

#include <stdio.h>

int main()
{
    int c;

    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    return 0;
}

Answer 1:

如果您使用Visual Studio中,有一个库调用conio( #include <conio.h>其限定的kbhit()函数和的getch)()。

否则,在Windows上,还有使用从Windows SDK(ReadConsoleInput()等)功能的可能性,但这需要一点点的代码(尽管,一旦完成,如果处理得当,它可以重复使用任何时间你想)



Answer 2:

如果你正在使用Visual Studio,您可以用getch()



Answer 3:

在这个简单的例子,其他的答案应该适合你罚款。

一般的解决方法是禁用行缓冲。 这取决于特定的控制台上; 下面的例子是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上,所以我不能对此进行测试。)



Answer 4:

在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?