Как можно больше придерживаться стандартного C - хорошая идея, но вы не собираетесь слишком далеко продвигаться в своей принятой задаче, используя только стандартный C. Механизмы для получения символов из терминала по одному заведомо зависят от платформы. , Для систем POSIX (MacOS X) посмотрите заголовок <termios.h>
. В старых системах используется большое количество заголовков и системных вызовов для достижения аналогичных эффектов. Вам нужно будет решить, собираетесь ли вы выполнять какую-либо специальную обработку символов, помня, что такие вещи, как «уничтожение строки», могут появляться в конце строки и убирать все введенные символы.
Для Windows вам нужно углубиться в WIN32 API - в коде между Unix и Windows практически не будет общего, по крайней мере, когда вы переводите «терминал» в посимвольный режим. Если у вас есть механизм для чтения отдельных символов, вы можете управлять общим кодом - возможно.
Также вам нужно беспокоиться о различиях между символами и нажатыми клавишами. Например, чтобы ввести 'ï' в MacOS X, введите option-u и i . Это три нажатия клавиш.