Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++ ввод без ожидания

Тимофей Набирушкин Ученик (95), на голосовании 2 месяца назад
Я хочу чтобы код работал и я в любой момент мог нажать клавишу и чтото происходило типо getch() ; останавливает программу в ожидании нажатия а мне надо без ожидания
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9508) 3 месяца назад
Для выполнения ввода без ожидания в C++, можно использовать функции и библиотеки, которые позволяют работать с не блокирующими вводами. Один из наиболее популярных способов — использование терминальной библиотеки `ncurses` на Unix-подобных системах или библиотеки `conio.h` на Windows. Вот пример для обоих случаев:

### Unix-подобные системы (Linux, macOS):

Использование библиотеки `ncurses`:

```cpp
#include <ncurses.h>
#include <unistd.h>

int main() {
initscr(); // Инициализация ncurses
nodelay(stdscr, TRUE); // Установка не блокирующего ввода
noecho(); // Отключение эхо ввода символов

int ch;
while (true) {
ch = getch(); // Получение символа
if (ch != ERR) { // Проверка, был ли введен символ
printw("You pressed: %c\n", ch);
refresh();
}
usleep(100000); // Задержка для уменьшения нагрузки на процессор
}

endwin(); // Закрытие ncurses
return 0;
}
```

### Windows:

Использование библиотеки `conio.h`:

```cpp
#include <iostream>
#include <conio.h>

int main() {
while (true) {
if (_kbhit()) { // Проверка, была ли нажата клавиша
char ch = _getch(); // Получение символа
std::cout << "You pressed: " << ch << std::endl;
}
Sleep(100); // Задержка для уменьшения нагрузки на процессор
}
return 0;
}
```

Обратите внимание, что в первом случае нужно установить библиотеку `ncurses` (например, с помощью пакетных менеджеров `apt`, `brew` и т.д.), а во втором случае используется встроенная библиотека Windows.

Эти примеры показывают, как можно обрабатывать ввод без ожидания, что позволяет программе продолжать выполнение, пока не будет нажата клавиша.
Тимофей НабирушкинУченик (95) 3 месяца назад
Без ожидания всмысле программа останавливается а как я говорил _getch() ; остонавливает программу до ввода клавиши а мне надо без останвки прогрмаммы
Тимофей НабирушкинУченик (95) 3 месяца назад
И не надо использовать нейросети тут сразу видно ты еë использовал
Тимофей Набирушкин, а он, как все эти бобики, думает, что самый умный здесь. Дизлайкни его тупой ответ, будет наука.
Василий Полубнев Просветленный (23522) 3 месяца назад
Такое можно сделать с помощью распараллеливания работы основной программы и ввода. Есть такой механизм threads. В итоге один тред будет ожидать ввод и принимать приходящие с клавиатуры символы, а второй - делать что-то ещё.
Похожие вопросы