cbreak/nocbreakの実験

普通にgetch()すると、リターン入力までが まとめて実行され、cbreak()してからgetch()する と、1字ずつ即時に値が返されることを調べよう。

nocbreak.c

#include <curses.h>
#include <unistd.h>             /* for sleep() */

int main()
{
  int ch;
  initscr();
  noecho();
  nocbreak();   /* まずはcbreakなしで入力 */
  addstr("アルファベットを適当に叩いてリターンを押してね\n");
  refresh();
  while ('\n' != (ch=getch())) {
    /* リターンが入力されるまで繰り返す */
    printw("%cがタイプされました\n", ch);
    refresh();
  }
  addstr("cbreak無し、完了です。続けてどうぞ。\n");
  refresh();
  cbreak(); /* ここで cbreak()!! */
  while ('\n' != (ch=getch())) {
    /* リターンが入力されるまで繰り返す */
    printw("%cがタイプされました\n", ch);
    refresh();
  }
  addstr("cbreakあり、完了です\n");
  refresh();
  sleep(3);
  endwin();
}

cursesライブラリについて