11

私の主な目的は、キーgetcharを待つのではなく、キャラクターを取得したらすぐに戻ることでした。ENTER私はこれを試しました

int main()
{
    setvbuf(stdin,NULL,_IONBF,0);
    getchar();

    return 0;
}

これをのプロトタイプと比較するsetvbuf

setvbuf ( FILE * stream, char * buffer, int mode, size_t size );

stdinバッファなしモードに設定する必要があります。

しかし、それでもgetchar()待ち続けますENTER

私はこのような関連する投稿を見てきました

Cで文字を読みながら印刷する

stdinこれは、バッファリングを解除するための代替方法を提案しています。しかし、なぜsetvbufメソッドが機能しないのか知りたいです

4

2 に答える 2

21

read()ターミナルドライバは、操作がすでに存在するものを受け入れたとしても、リターンを押すまで何も返しません。

端末から文字ごとの入力を取得するには、正規モードからrawモードまたはcbreakモードに切り替える必要があります。これには、まったく異なる操作が必要です。端末の制御方法については、「GeneralTerminalInterface」のPOSIXマニュアルを参照してください。または、cursesライブラリの使用を検討してください。

参照:カノニカルvs非カノニカル端末入力

于 2012-04-20T14:15:39.890 に答える
1

Linuxまたは別のUnixライクなシステムでこれを試している場合、入力をバッファリングし、行全体のみを渡すのは端末です。ncursesを使用して、これを回避できます。

#include <ncurses.h>

int main()
{
    initscr();
    getch();
    endwin();

    return 0;
}

コンパイル:

gcc -o main main.c -lncurses
于 2012-04-20T14:24:29.737 に答える