お二方ともお返事ありがとうございます。
残念ながら、私のメインの開発環境は Linux + GDC + Tango で、C コンパイラとして DMC を使用していないため、conio.h はありません。
また、私の開発環境では getc() と getchar() の両方が行バッファリングされていることもわかったので、やりたいことを達成できませんでした。
最後に、GNU ncurses ライブラリを使用してこの演習を行いました。D は C ライブラリを直接インターフェースできるので、それほど手間はかかりません。プログラムで使用した関数プロトタイプを宣言し、これらの関数を呼び出して、プログラムを ncurses ライブラリに直接リンクするだけです。
それは私の Linux マシンで完全に動作しますが、サードパーティのライブラリなしでどうやってこれを行うことができ、Linux と Windows の両方で実行できるのかまだわかりません。
import tango.io.Stdout;
import tango.core.Thread;
// Prototype for used ncurses library function.
extern(C)
{
void * initscr();
int cbreak ();
int getch();
int endwin();
int noecho();
}
// A keyboard handler to quit the program when user hit ESC key.
void keyboardHandler ()
{
initscr();
cbreak();
noecho();
while (getch() != 27) {
}
endwin();
}
// Main Program
void main ()
{
Thread handler = new Thread (&keyboardHandler);
handler.start();
for (int i = 0; ; i++) {
Stdout.format ("{}\r\n", i).flush;
// If keyboardHandler is not ruuning, it means user hits
// ESC key, so we break the infinite loop.
if (handler.isRunning == false) {
break;
}
}
return 0;
}