Есть ли функция, которая заставляет программу командной строки ждать, как system("pause")
, и продолжает работать только после принятия определенного ключа?C++ - Пауза программа до тех пор, пока не будет нажата определенная клавиша
ответ
Если вы ждете символа новой строки, есть простой и переносимый способ сделать это. Просто используйте getline
.
Если вы хотите получать другие символы, не получив сначала первую строку, тогда все будет менее переносимым. В системах Unix вам нужно установить свой терминал в «сырой режим». Как отмечается в замечании Джорджа, ncurses - это простой способ сделать это, плюс он предоставляет удобные функции для рисования вещей в определенном месте на терминале, получения произвольных ключей и т. Д.
В Windows вам нужно будет использовать его console interface. Разумеется, это невозможно использовать за пределами Windows.
Как замечают Нейл Баттерворт, есть также версия проклятий, которая работает для Windows, называемая PDCurses. Если вам нужно написать программное обеспечение, которое работает как для Unix, так и для Windows, это хороший вариант для преследования.
проклятия также доступны в Windows - http://pdcurses.sourceforge.net/ –
Если getline и ncurses не работают для вас, всегда есть conio.h и getch(). Есть некоторые проблемы с этим, как объяснено в этом ответе Why can't I find <conio.h> on Linux?
Удачи.
на интерфейсе консоли Windows Функция getche() будет ждать нажатия клавиши перед дальнейшим исполнением.
Кажется, вы не поняли мой вопрос. Я хотел бы знать, есть ли функция, похожая на getch(), но работает только для определенного ключа. – Twilight053
Если вы работаете в Windows, вы можете использовать kbhit(), который является частью библиотеки времени выполнения Microsoft. Если вы на Linux, вы можете реализовать kbhit таким образом
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int kbhit(void)
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if(ch != EOF)
{
ungetc(ch, stdin);
return 1;
}
return 0;
}
Компиляция шаги:
gcc -o kbhit kbhit.c
При запуске с
./kbhit
Это побуждает вас нажатия клавиши, и завершает работу при нажмите клавишу (не ограничиваясь клавишами «Ввод» или «Печать»).
(Got через Интернет - вы можете изменить код и использовать конкретные значения сп как \ п для Enter ключ)
- 1. Итерация до тех пор, пока не будет нажата клавиша C
- 2. Голанг до тех пор, пока не будет нажата клавиша
- 3. Приостановить программу до тех пор, пока не будет нажата клавиша
- 4. Java Пауза до тех пор, пока не будет нажата какая-либо клавиша
- 5. C: Читайте от stdin до тех пор, пока не будет нажата клавиша Enter
- 6. Выполнение программы до тех пор, пока не будет нажата кнопка
- 7. Powershell не продолжается до тех пор, пока не будет нажата какая-либо клавиша
- 8. Пауза до тех пор, пока ручка внешнего окна не будет закрыта или нажата кнопка
- 9. Запустите анимацию до тех пор, пока не будет нажата кнопка
- 10. wait до тех пор, пока не будет нажата кнопка
- 11. Javascript спящий режим до тех пор, пока не будет нажата клавиша
- 12. ListView не обновляется до тех пор, пока на симуляторе не будет нажата клавиша
- 13. Как приостановить фигуру pylab до тех пор, пока не будет нажата клавиша или не будет нажата мышь?
- 14. Perl: спящий режим за x секунд до тех пор, пока не будет нажата клавиша
- 15. Чтение предложения до тех пор, пока клавиша ENTER не будет нажата с использованием двухмерного массива символов
- 16. Использование цикла while для ввода пользователя до тех пор, пока не будет нажата клавиша Enter
- 17. Linux - приостановить цикл до тех пор, пока не будет нажата клавиша
- 18. C# WPF Пауза обрабатывается до тех пор, пока кнопка не была нажата
- 19. Чтение ввода до тех пор, пока не будет найдена определенная строка C++
- 20. Повторяющийся контур до тех пор, пока не будет нажат ввод
- 21. Loop до тех пор, пока не нажат ключ Java
- 22. играть музыку бесконечно до тех пор, пока не будет нажата кнопка
- 23. C: Подсчитайте буквы до тех пор, пока не будет введена определенная запись
- 24. Прочитайте ввод пользователя до тех пор, пока не будет нажат ESC в C
- 25. Содержимое таблицы не будет отображаться до тех пор, пока не будет нажата кнопка экрана.
- 26. Perl: прочитайте каталог до тех пор, пока не будет файл
- 27. Приостановить цикл while до тех пор, пока кнопка не будет нажата без использования обработчика событий C#
- 28. Держите кнопку невидимой до тех пор, пока не будет нажата кнопка RadioButton. C#
- 29. Заблокировать до тех пор, пока элемент не будет доступен
- 30. Повторение Паскаля ... до тех пор, пока против C не ... пока
вы можете взглянуть на [Ncurses] (https://www.gnu.org/ программное обеспечение/ncurses /) – George
Вы имеете в виду, как переходить через код по одной строке за раз? – ArmenB
Не в стандартной библиотеке C++. –