Получение ввода от пользователя без заметного перерыва в выполнении программы возможно только при программировании с графическим интерфейсом.При работе в консоли каждый запрос на ввод данных пользователем будет блокироваться по очевидной причине, по которой программе приходится ждать, чтобы получить необходимые данные, прежде чем продолжить.
По этой же причине вам следует инициализировать переменные перед их объявлением;если вы этого не сделаете, переменные, размещенные в стеке, будут содержать случайные (для вас) данные, и программа не будет работать так, как задумано.Концептуально, это та же самая проблема, с которой сталкивается консоль, за исключением того, что она не обладает роскошью свободной воли и не может просто пропустить ожидание.
Концептуально программы с пользовательским интерфейсом работают, работаяс петлей.Каждое событие, от движения мыши до нажатия кнопки, запускает событие в процедуре Window. В Win32 API это просто оператор switch, который проверяет каждое возможное событие на предмет того, что действительно произошло.Когда есть совпадение, система запускает этот обработчик события.
Следует отметить, что только кажется как будто нет задержки, потому что обычно графические оконные процедуры достаточно быстры, чтобы, кажется, реагироватьмгновенно.В действительности любое действие над окном запускает вычисление компьютером, чтобы определить, какая часть окна была заблокирована и должна быть перерисована, поскольку теперь это называется «недействительным».
Наконец, я очень рекомендуюдругой метод для обновления табло.Я знаю, что это просто надуманный пример для экспериментов с вами, но это означает, что он также хорош, если не лучше, для опробования некоторых шаблонов проектирования, а именно шаблона наблюдателя.Вместо того, чтобы программа проверяла входные данные каждый возможный тактовый цикл, это просто пустая трата времени.Когда у вас такая ситуация, обычно используют функции обратного вызова , которые в C - это просто указатели функций, которые вы передаете.Таким образом, вам не нужно проверять, когда происходит событие, вы можете просто заставить событие вызывать функцию, которую вы передали в качестве параметра. Кстати, именно так работает Node.js , и, похоже, он так много делает сразу, несмотря на то, что является однопоточным.
Если вы слышали что-нибудь о программировании Reactive в последнее время* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Я говорю об этом, и вот почему я об этом говорю, потому что это один из наиболее распространенных, хотя и тривиальных вопросов.Примеры сценариев реактивного программирования из учебника.