Спасибо за оба ваших ответа.
К сожалению, моя основная среда разработки - Linux + GDC + Tango, поэтому у меня нет conio.h, так как я не использую DMC в качестве моего компилятора C.
И я также обнаружил, что и 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;
}