Вы не указали ОС, поэтому я предполагаю, что некоторые POSIX-совместимые ОС.
Вы можете использовать , выбрать . Это может быть использовано для блокировки набора файловых дескрипторов (в вашем случае stdin) с ограниченным тайм-аутом или неопределенной блокировкой.
Я предполагаю, что, поскольку это программа чата, вы также захотите сделать это с другим дескриптором файла, например, с сокетом tcp чата. Таким образом, вы можете проверить входные данные с помощью one call.
В случае консоли Windows вы должны иметь возможность использовать GetStdHandle и WaitForSingleObject / WaitForMultipleObjects, если select не работает для вас.