timeoutの実験

普通にgetch()すると入力があるまで待っているが、 timeout()関数で待ち時間をセットしてからgetch()する と、時間切れで先に進ませることができる。

timeout.c

#include <curses.h>

void yesno()
{
  addstr("yesかnoか(y/n)?: ");
  refresh();
}

int main()
{
  int i, answer;
  char *sekashi[] = {
    "わからんけ", "はよ答えなはれ", "だめけ", "ぶっぶー"
  };
  int nummsg = (sizeof sekashi)/sizeof(char*); //メッセージの個数
  initscr(); cbreak();
  /* noecho();  - 押したキーを画面に出す場合は noecho() しない */
  addstr("社会契約論の著者ルソーは、");
  addstr("童謡「むすんでひらいて」を作った。");
  yesno();
  answer = getch();             /* タイムアウト無し */
  if (answer == 'y') {
    addstr("\n正解!\n");
  } else {
    addstr("\nぶっぶー、yesじゃ。常識じゃ!\n");
  }
  timeout(3000);                /* タイムアウトを3秒に */
  addstr("韓国語でたくわんのことをタクワンという。");
  yesno();
  for (i=0; i<nummsg; i++) {
    answer = getch();           /* 1秒で時間切れ */
    if (answer == ERR) {        /* 時間切れのとき */
      beep();                   /* 音をならして */
      addstr("\n");
      addstr(sekashi[i]);
      addstr("\n");
      yesno();
    } else {
      if (answer == 'y') {
        addstr("\nそう!\n");
      } else {
        addstr("\n外れ!\n");
      }
      break;
    }
  }
  addstr("たくわんは、タクワン、割箸のことをワリバシというらしいぞ\n");
  addstr("(リターンで終了)\n");
  refresh();
  timeout(-1);
  nocbreak();
  getch();
  endwin();
}

cursesライブラリについて