Is there a way to get text as soon as possible without waiting for a newline?

前端 未结 4 1141
孤独总比滥情好
孤独总比滥情好 2021-01-26 04:04

I\'m using C. I wrote a very simpe program which prints back the input, using getchar() and putchar() or printf(). Is there any way to make it so as soon as the user types one k

相关标签:
4条回答
  • 2021-01-26 04:26

    If you're using Visual Studio, you can use getch().

    0 讨论(0)
  • 2021-01-26 04:35

    On Linux you can take over the terminal:

    #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*/
    
    0 讨论(0)
  • 2021-01-26 04:42

    In this simple case, the other answers should suit you fine.

    The general solution is to disable line buffering. This depends on the particular console; the following example is Windows-only (untested):

    #include <windows.h>
    
    int main() {
        HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
        DWORD mode;
        GetConsoleMode(hConsole, &mode);
        SetConsoleMode(hConsole, mode & ~ENABLE_LINE_INPUT);
        // ...
    }
    

    I assume that the standard C library functions are implemented in terms of ReadConsole and friends; if not, this might not even work. (I'm currently on Linux, so I cannot test this.)

    0 讨论(0)
  • 2021-01-26 04:49

    if you are using Visual Studio, there is a library called conio (#include <conio.h>) which defines a kbhit() function and getch().

    otherwise, on Windows, there is still the possibility of using functions from the Windows SDK (ReadConsoleInput() and the like), but that would require a little bit more code (although, once done and if done properly, it can be reused any time you want)

    0 讨论(0)
提交回复
热议问题