有没有办法尽快获取文本而无需等待换行?

时间:2009-11-01 14:27:24

标签: c windows command-line input

我正在使用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;
}

4 个答案:

答案 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*/